我一直在寻找如何将大端序转换为小端序的方法,但是没有找到能解决我的问题的好方法。看起来有很多方法可以进行此转换。无论如何,以下代码在大端序系统上工作正常。但是,我应该如何编写一个转换函数,使其在小端序系统上也能正常工作呢?
这只是一项额外的作业,因为学校的系统正在运行大端序系统。只是我觉得很好奇,想让它在我家里的计算机上也能正常工作。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file;
file.open("file.bin", ios::in | ios::binary);
if(!file)
cerr << "Not able to read" << endl;
else
{
cout << "Opened" << endl;
int i_var;
double d_var;
while(!file.eof())
{
file.read( reinterpret_cast<char*>(&i_var) , sizeof(int) );
file.read( reinterpret_cast<char*>(&d_var) , sizeof(double) );
cout << i_var << " " << d_var << endl;
}
}
return 0;
}
已解决
大端序和小端序只是字节的反向排列。我编写的这个函数似乎满足我的需求。我在这里添加它,以防将来有人需要。不过这只适用于双精度浮点数,如果要处理整型数据,可以使用torak建议的函数或者修改这段代码,使其仅交换4个字节。
double swap(double d)
{
double a;
unsigned char *dst = (unsigned char *)&a;
unsigned char *src = (unsigned char *)&d;
dst[0] = src[7];
dst[1] = src[6];
dst[2] = src[5];
dst[3] = src[4];
dst[4] = src[3];
dst[5] = src[2];
dst[6] = src[1];
dst[7] = src[0];
return a;
}