位序/端序flac译码 我目前正尝试将FLAC写入WAV代码转换器作为C++中的练习,目前我对FLAC格式关于比特排序的措辞有点困难。

位序/端序flac译码 我目前正尝试将FLAC写入WAV代码转换器作为C++中的练习,目前我对FLAC格式关于比特排序的措辞有点困难。,c++,c,audio,decoding,flac,C++,C,Audio,Decoding,Flac,以下是关于订购的(小)部分: FLAC比特流中使用的所有数字都是整数;没有浮点表示。所有数字都是大端编码的。除非另有规定,否则所有数字均无符号 这是否适用于位排序以及字节排序? 更具体地说,如果我读取(比如)一个7位的值,我会先得到最高有效位吗?位顺序应该永远不会是一个问题,除非您使用带有位字段的struct(这是一个很好的避免的理由) 此外,一次只能读取一个字节的数据。如果要从一个字节中读取7位,则需要对字节值应用位掩码 例如,如果一个字节包含一个高阶位的值和另一个低阶位的值,则可以按如下方式

以下是关于订购的(小)部分:

FLAC比特流中使用的所有数字都是整数;没有浮点表示。所有数字都是大端编码的。除非另有规定,否则所有数字均无符号

这是否适用于位排序以及字节排序?
更具体地说,如果我读取(比如)一个7位的值,我会先得到最高有效位吗?

位顺序应该永远不会是一个问题,除非您使用带有位字段的
struct
(这是一个很好的避免的理由)

此外,一次只能读取一个字节的数据。如果要从一个字节中读取7位,则需要对字节值应用位掩码

例如,如果一个字节包含一个高阶位的值和另一个低阶位的值,则可以按如下方式提取它们:

field1 = (byte & 0x80) >> 7;
field2 = byte & 0x7f;

你打算怎么读单个比特呢?你可以在读过它们之后再读。这听起来有点过分了。好吧,让我们举一个例子。我希望按照顺序,1位知道它是否是最后一位,7位表示类型,然后24位表示长度。我从那里读取的第一个字节,第0位是最后一个标志,第1-7位是类型。要获取数据,我只需做:
flag=byte&1,type=(byte>>1)
这是对排序的一个很好的理解吗?@Pulo该字段的有效值为0-127,因此使用
value&0x7f
确定来提取它。因此,根据我的理解,这意味着最高有效位是最后一个标志,类型是用较低的位构建的。规范中说我应该首先看到一个标志,类型是从低位构建的,最后一个标志是从高位构建的。这是对正在发生的事情的一个很好的评估吗?@Pulo正确,所以你需要做
flag=byte>>7
type=byte&0xf
完美,这正是我需要知道的。请你把这个添加到答案中以备将来参考,我很乐意接受。