2

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

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

然而,如果这些位的顺序不正确,应该是 0x3A 或 0011 1010,那么我有 10 作为我预期的前两位。

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

我只是很困惑,希望得到一些帮助来理解发生了什么。我不经常处理这个级别的事情。

4

1 回答 1

1

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

于 2015-05-06T12:47:53.330 回答