Bitstream解析和终结性

Bitstream parsing and Endianness

本文关键字:Bitstream      更新时间:2023-10-16

我正在尝试解析bitstream,并且我很难绕过Endianness。我有一个字节缓冲区,我需要能够读取长度不同的bitfields,大部分从1位到8位。

我的问题是字节的终点。当我使用调试器逐步完成时,底部的4位似乎位于字节的顶部。也就是说,我期望前两个位为10(它们必须为10),但是,与调试器一起检查时,比特斯流中的第一个字节是0xa3或1010 0011。意思是,假设位在"正确"顺序中,前两个位实际上是11(右至左)。

但是,如果位的顺序不正确,应该是0x3a或0011 1010,那么我就有10个,因为我的前两个位。

这使我感到困惑,因为这似乎不是一个有序的问题,即MSB到LSB/LSB到MSB,而是nibble Order。这是怎么发生的?这似乎只是它从文件中出来的方式。有可能这是一个无效的bitstream,但是在读取十六进制编辑器中的文件时,我已经看过这种事情,看上去是在"错误"的顺序中。

我只是感到困惑,想帮助您了解发生了什么。我不经常在这个级别上处理事情。

您不需要关注BIT顺序,因为在C/C 中,您无法使用指针算术算在位。您只能使用独立于本地机器的位顺序的位操作员来操纵位。您在OP中提到的只是一个可视化问题。不同的辩论者可能会选择不同的方式来可视化字节中的位。此事没有对与错。只是偏好。无论是字节订单,真正重要的是