比特流解析和Endianness

时间:2015-05-06 12:17:46

标签: c++ bit-shift endianness bitstream

我正在尝试解析比特流,而我无法理解字节序。我有一个字节缓冲区,我需要能够读取不同长度的位域,主要是从1位到8位。

我的问题来自字节的字节序。当我使用调试器时,底部的4位似乎位于字节的顶部。也就是说,在我期望前两位为10(它们必须为10)的情况下,当使用调试器检查时,位流中的第一个字节是0xA3或1010 0011。意思是,假设这些位是“正确”的顺序,前两位实际上是11(从右到左阅读)。

然而,似乎如果这些位的顺序不正确,并且应该是0x3A或0011 1010,那么我的前两位就是10。

这让我很困惑,因为它似乎不是位顺序的问题,MSb到LSb / LSb到MSb,而是半字节顺序。这是怎么发生的?这似乎只是它从文件中出来的方式。有可能这是一个无效的比特流,但是我在读取Hex编辑器中的文件之前已经看到过这种情况,这些错误似乎是在“错误”的顺序中。

我很困惑,希望能帮助了解正在发生的事情。我不经常处理这个层面的事情。

1 个答案:

答案 0 :(得分:1)

您不需要关注位顺序,因为在C / C ++中,您无法使用指针算术迭代这些位。您只能使用与本地计算机的位顺序无关的按位运算符来操作这些位。您在OP中提到的只是可视化问题。不同的调试器可以选择不同的方式来可视化字节中的位。这件事没有对错。只是偏好。如果字节顺序真正重要。