C++读取字节问题

标签 c++

我有这个问题,我不知道是否是预期的,事情是这样的:

我正在尝试将文件中的字节加载到这样的结构中:

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/

相关文章:

c++ - 单个变量如何存储多个值?

c++ - 在谷歌测试框架中,如何期待一个函数调用或另一个函数调用?

c++ - 有没有办法使用独立的 `std::begin` 和 const_iterator?

c++ - 从任何类型转换

c++ - 像素距离泛光填充

c++ - 使用两个命名空间只能部分起作用

c++ - 如何在 Lua 中处理 C++ 类构造函数失败

c++ - 如何将函数的指针从std::function传递给Linux克隆?

c++ - 无法在opengl中绘制多个对象

c++ - C++ 中的 2 的补码转换器