Myx*_*Myx 5 encoding multibyte
我对字节编码的世界很新,所以请原谅我(并且无论如何,纠正我)如果我以错误的方式使用/表达简单的概念.
我试图理解可变字节编码.我已阅读维基百科的文章(http://en.wikipedia.org/wiki/Variable-width_encoding)以及信息检索教科书中的书籍章节.我想我理解如何编码十进制整数.例如,如果我想为整数60提供可变字节编码,我会得到以下结果:
1 0 1 1 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
(如果上述内容不正确,请告诉我).如果我理解该方案,那么我不完全确定如何压缩信息.是因为通常我们会使用32位来表示一个整数,因此表示60会导致1 1 1 1 0 0前面有26个零,从而浪费该空间而不是仅用8位代表它?
提前感谢您的澄清.
这样做的方法是保留其中一位来表示“我还没有完成该值”。通常,这是最重要的位。
当你读取一个字节时,你会处理低 7 位。如果最高有效位为 1,则您知道还有一个字节需要读取,您可以重复该过程,将接下来的 7 位添加到当前的 7 位中。
MIDI 格式使用该精确编码来表示 MIDI 事件的长度,方式如下:
例如,值 0x80 将使用字节 0x81 0x00 表示。您可以尝试对这两个字节运行算法,您会发现您将获得正确的值。
UTF-8 的工作原理类似,但它使用稍微复杂的方案来告诉您应该期望多少字节。这允许进行一些错误纠正,因为您可以轻松判断获得的字节是否与声明的长度匹配。维基百科很好地描述了它们的结构。