位排序/字节序 flac 解码
Bit ordering / Endianness flac decoding
我目前正在尝试编写一个 FLAC 到 WAV 转码器作为 C++ 的练习,我目前正在努力解决 FLAC 格式关于位排序的措辞。
这是讨论排序的(小)部分:
All numbers used in a FLAC bitstream are integers; there are no floating-point representations. All numbers are big-endian coded. All numbers are unsigned unless otherwise specified.
这是否适用于位排序以及字节排序?
更具体地说,如果我读取一个 7 位的值,我会得到最高有效位第 1 位吗?
位排序永远不会成为问题,除非您使用带位域的 struct
(这是避免出现这种情况的充分理由)。
另外,您一次只能读取一个字节的数据。如果要从一个字节中读取 7 位,则需要对字节值应用位掩码。
例如,如果一个字节包含高位的一个值和低位 7 位的另一个值,您将按如下方式提取它们:
field1 = (byte & 0x80) >> 7;
field2 = byte & 0x7f;
我目前正在尝试编写一个 FLAC 到 WAV 转码器作为 C++ 的练习,我目前正在努力解决 FLAC 格式关于位排序的措辞。
这是讨论排序的(小)部分:
All numbers used in a FLAC bitstream are integers; there are no floating-point representations. All numbers are big-endian coded. All numbers are unsigned unless otherwise specified.
这是否适用于位排序以及字节排序? 更具体地说,如果我读取一个 7 位的值,我会得到最高有效位第 1 位吗?
位排序永远不会成为问题,除非您使用带位域的 struct
(这是避免出现这种情况的充分理由)。
另外,您一次只能读取一个字节的数据。如果要从一个字节中读取 7 位,则需要对字节值应用位掩码。
例如,如果一个字节包含高位的一个值和低位 7 位的另一个值,您将按如下方式提取它们:
field1 = (byte & 0x80) >> 7;
field2 = byte & 0x7f;