1.问题
• uint32 类型的1234和字符串"1234"写入文件,按小端序写入;从文件中读回写入的数据,并按原类型打印出来
• 判断当前cpu是大端模式还是小端模式,然后打印出来
2.
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <cassert>
#include <string>
using namespace std;
void test_endian();
int main()
{
uint32_t A=123;
printf("%x", A);
cout << A << endl;
char arr[5] = "1234";
int age;
//利用ofstream类的构造函数创建一个文件输出流对象来打开文件
ofstream fout("C:\\Users\\Administrator\\Desktop\\1.txt");
if (!fout)
{
cout << "文件不能打开" << endl;
}
else
{
fout << A << endl;
// 输出到磁盘文件
for (int i = 0; i < 5; i++)
{
fout << arr[i] ;
}
cout << "文件能打开" << endl;
test_endian();
fout.close();//关闭文件输出流
//利用ifstream类的构造函数创建一个文件输入流对象
ifstream fin("C:\\Users\\Administrator\\Desktop\\1.txt");
if (!fin)
{
cout << "文件不能打开" << endl;
}
else
{
int num1;
fin >> num1;
char buffer[80] = {};
memset(buffer, 0x0, sizeof(buffer));
// 从磁盘文件输入
for (int i = 0; i < sizeof(buffer); i++)
{
fin >> buffer[i];
}
for (int i = 0; i < sizeof(buffer); i++)
{
age = buffer[i];
if(age!=0)
cout << age;
}
// 关闭文件输入流
fin.close();
cout <<num1 <<endl;
}
}
}
void test_endian()//测试大小端
{
uint32_t i = 0x04030201;
unsigned char* cp = (unsigned char*)&i;
if (*cp == 1)
cout << "小端模式" << endl;
else if (*cp == 4)
cout << "大端模式" << endl;
else
printf("who knows?\n");
}
class A
{
public:
explicit A(uint32_t i = 123)
{
num = i;
}
private:
uint32_t num;
};
输出在文本上为123
1234
但是,检查的xx说在文本上uint32输出应该为乱码,我这个程序是哪里出了问题
应该怎么改
123对应十六进制0x7B
文件的前四个字节为7B 00 00 00(小端)或00 00 00 7B(大端)