sha*_*h17 5 c c++ endianness bitset
我正在尝试将从big-endian机器发送的一些数据解码到解码器,解码器位于little-endian机器上.我没有这么做过,我觉得自己很困惑.
我使用位集来打印我的数据,这样我就可以确切地看到它是如何出现在特定的32位结构中的,我可以看到我需要的数据位于位序列的中间.
现在,我知道如果你有一个32位的值,从大到小,你可以反转字节顺序.如果我这样做,我的数字并没有达到我预期的数字(手工完成).
所以,例如.我有一个32位的unsigned int.我知道它来自我的Big-Endian机器为0x50000000.当我使用little-endian机器上的bitset打印时,cout << "packSpare 32: " << bitset<32>(Data.pack_Spare).to_string() << endl;
我得到0x00005000.所以它看起来更像是按顺序交换前两个字节,依次与后两个字节交换.
我原来有这样的结构:
#pragma pack(push, 1)
struct PACK_SPARE
{
int Spare3:28;
int Heading_Reference:1;
int Spare2:1;
int H_Valid:1;
int Spare5:1;
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
这是与大端机器发送方式相反的顺序,但是我注意到了一些明显的位交换发生的问题,所以我想把整个东西拉成32位,然后交换,然后打印出来数据.现在我正在使用int pack_Spare;
它只是采用两个16位块,并交换那些,而不是在整个32位值上进行交换?对不起,如果这没有意义,就像我说的那样,我有点困惑.
编辑 此数据不是通过网络传输的.我正在从视频文件中流式传输比特.我将此数据存储到其相应的值中.所以我想我的问题是,如果我有一个32位的int,然后将数据传入该变量,如果我使用bitset,为什么它交换我的32位int的两个16位分组,而不是按字节进行?我期待0x50000000,但我得到0x00005000(0000和5000被交换,而不是我期望的典型的字节序交换,这正在颠倒所有字节的顺序).