0

可能重复:
有什么方法可以用小端程序读取大端数据?

我的项目中有下面的联合结构,我正在尝试修改它以读取大端文件,并且由于程序在 x86 上运行,它尝试以小端方式读取文件并从联合返回错误的结果。有没有办法修改联合以大端格式读取它?或获取正确数据类型的替代方法?

struct AptConstItem {
    AptConstItemType type;
    union {
        const char *strvalue;
        unsigned int numvalue;
    };
};

谢谢。

4

1 回答 1

2

无论字节顺序如何,您都使用相同的基本技术:阅读大字节序:

uint32_t
readBigEndian( std::istream& binaryInput )
{
    uint32_t result 
            = (binaryInput.get() << 24) & 0xFF000000;
    result |= (binaryInput.get() << 16) & 0x00FF0000;
    result |= (binaryInput.get() <<  8) & 0x0000FF00;
    result |= (binaryInput.get()      ) & 0x000000FF;
    return result;
}

对于小端,您只需颠倒班次和掩码的顺序。

于 2012-11-09T11:41:53.697 回答