我正在做一种flac解析器,我需要解析每个帧的标头。以flac格式(https://xiph.org/flac/format.html#frame_header)描述了一个字段
if(可变块大小)<8-56>:“ UTF-8”编码的样本编号 (解码的数字是36位)[4]否则<8-48>:“ UTF-8”编码帧 数字(解码后的数字为31位)[4]
[4]说:
用于样本/帧号的“ UTF-8”编码是相同的 可变长度代码,用于存储压缩的UCS-2,扩展为 处理更大的输入。
如果是8-56或8-48位,我绝对不知道如何知道该字段的大小。为什么解码后的数字是36或31位?另外,当我在使用UTF-8编码的十六进制编辑器中打开flac文件时,此字段中没有数字。我将非常感谢您的帮助。
答案 0 :(得分:0)
UTF-8编码样本意味着第一个字节(帧头的5个字节)包含有效位,这些有效位将告诉您在帧/样本号中有多少个后续字节。
您可以在此处检查有效位的格式:https://en.wikipedia.org/wiki/UTF-8
如果数字以48位编码,则如下所示: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
它具有31位('x'),您可以提取它并将其放入更易于管理的类型,例如UInt32。