我有一个在unix机器上创建的二进制文件.这只是一堆接一个写的记录.记录的定义如下:
struct RECORD {
UINT32 foo;
UINT32 bar;
CHAR fooword[11];
CHAR barword[11];
UNIT16 baz;
}
Run Code Online (Sandbox Code Playgroud)
我试图找出如何在Windows机器上阅读和解释这些数据.我有这样的事情:
fstream f;
f.open("file.bin", ios::in | ios::binary);
RECORD r;
f.read((char*)&detail, sizeof(RECORD));
cout << "fooword = " << r.fooword << endl;
Run Code Online (Sandbox Code Playgroud)
我得到了一堆数据,但这不是我期望的数据.我怀疑我的问题与机器的endian区别有关,所以我来问这个问题.
我知道多个字节将存储在windows中的little-endian和unix环境中的big-endian中,我明白了.对于两个字节,Windows上的0x1234在unix系统上将为0x3412.
endianness会影响整个结构的字节顺序,还会影响结构的每个成员的字节顺序?我将采用什么方法将在unix系统上创建的结构转换为在Windows系统上具有相同数据的结构?任何比几个字节的字节顺序更深入的链接也会很棒!