c++ - 位排序/字节顺序 flac 解码
问题描述
我目前正在尝试编写一个 FLAC 到 WAV 转码器作为 C++ 的练习,我目前正在为 FLAC 格式关于位排序的措辞苦苦挣扎。
这是谈论订购的(小)部分:
FLAC 比特流中使用的所有数字都是整数;没有浮点表示。所有数字都是大端编码的。除非另有说明,否则所有数字均无符号。
这是否适用于位排序以及字节排序?更具体地说,如果我读取一个 7 位的值,我会得到最重要的第 1 位吗?
解决方案
除非您使用struct
带有位域的位域(这是避免这种情况的好理由),否则位顺序永远不会成为问题。
此外,您一次只能读取一个字节的数据。如果要从一个字节中读取 7 位,则需要对字节值应用位掩码。
例如,如果一个字节在高位中包含一个值,在低位 7 位中包含另一个值,您将按如下方式提取它们:
field1 = (byte & 0x80) >> 7;
field2 = byte & 0x7f;
推荐阅读
- javascript - 从放置在android资产文件夹中的JS文件访问java脚本函数,无需任何html或webview
- python - Tkinter live matplotlib 错误
- amazon-web-services - Kubectl 命令显示“无法连接到服务器:EOF”错误
- javascript - 开始时没有数据时的动态 Highstock 图表
- amazon-web-services - 转换速度模板时出错
- python - 哪种数据结构最好考虑插入/访问以存储不同单元的时间戳?(数据非常大)
- sql - 使用 SSD 时我应该在 PostgreSQL 上禁用位图扫描吗?
- css - 如何使用 PostCSS 在 Vue 中导入全局 CSS?
- android - 在 android studio 中出现以下错误:程序类型已存在:com.google.api.AuthProto
- javascript - 使用 mongoose 在 expressj 中验证 OTP