我有这个问题,我不知道是否是预期的,事情是这样的:
我正在尝试将文件中的字节加载到这样的结构中:
struct
{
char
char
char
char
unsigned int
}
但问题是当 unsigned int 被填充时,似乎在读取流中交换了字节,例如如果文件包含 0x45080000,则 unsigned int 将为 0x84500000,这是错误的。
如果我将 unsigned int 更改为 BYTE[4],这可以“解决”,但这不是我想要的。这是我用来从文件中读取的代码:
fopen_s( &mFile, "myFile.ext", "rb" );
if( mFile == NULL ) print( " **** E R R O R ! **** " );
else
{
if( fread( &myStruct, sizeof( MY_Struct ), 1, myFile) != 1)
{
print( " **** E R R O R ! **** " );
return 0;
}
}
这是预期的行为还是我做错了什么?
问候
最佳答案
正如您所发现的,可移植序列化可能会很痛苦。您需要以规范化格式(网络字节顺序很常见)单独序列化每个属性,而不是编写和读取结构。然后,当您反序列化字节时,这些字节会正确返回。
关于C++读取字节问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835062/