相关疑难解决方法(0)

如何将big-endian结构转换为小端结构?

我有一个在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系统上具有相同数据的结构?任何比几个字节的字节顺序更深入的链接也会很棒!

c++ struct endianness

18
推荐指数
3
解决办法
3万
查看次数

标签 统计

c++ ×1

endianness ×1

struct ×1