Encoding 变量字节编码澄清

Encoding 变量字节编码澄清,encoding,multibyte,Encoding,Multibyte,我对字节编码的世界非常陌生,所以如果我用错误的方式使用/表达简单的概念,请原谅(当然,请纠正我) 我试图理解变量字节编码。我读过维基百科的文章()以及信息检索课本上的一篇文章。我想我知道如何编码十进制整数。例如,如果我想为整数60提供变量字节编码,我将得到以下结果: 1 0 1 1 1 1 0 0 (如果上述内容不正确,请告知我)。如果我理解这个方案,那么我不完全确定信息是如何压缩的。这是因为通常我们会使用32位来表示一个整数,因此表示60会导致前面有26个零的1 0,从而浪费空间,而不是仅用

我对字节编码的世界非常陌生,所以如果我用错误的方式使用/表达简单的概念,请原谅(当然,请纠正我)

我试图理解变量字节编码。我读过维基百科的文章()以及信息检索课本上的一篇文章。我想我知道如何编码十进制整数。例如,如果我想为整数60提供变量字节编码,我将得到以下结果:

1 0 1 1 1 1 0 0
(如果上述内容不正确,请告知我)。如果我理解这个方案,那么我不完全确定信息是如何压缩的。这是因为通常我们会使用32位来表示一个整数,因此表示60会导致前面有26个零的
1 0
,从而浪费空间,而不是仅用8位来表示它


提前感谢您的澄清。

您一针见血

有许多编码方案,如gamma和delta,它们是elias编码的特例。这些是位级代码,与您使用的字节级代码相反,当您对小数字有强烈的倾斜时(通常可以通过编码增量而不是绝对值来实现),这些代码非常有用


位级编码方案比字节级方案更难实现,而且额外的CPU负担可能超过读取数据更少所节省的时间,尽管大多数现代CPU都有“最高位”和“最低位”指令,这些指令可以显著提高位级编解码器的性能。随着CPU速度继续超过RAM速度,位级方案将变得更具吸引力,尽管字节级编解码器的简单性也是一个重要因素。

是的,你是对的,你可以通过使用一个字节而不是4个字节编码来节省空间。
通常,如果编码的值远小于原始固定宽度编码中的最大值,则可以节省内存。

这样做的方法是保留一个位,表示“我没有处理完该值”。通常,这是最重要的位

读取字节时,处理较低的7位。如果最高有效位为1,则您知道还有一个字节要读取,然后重复该过程,将下一个7位添加到当前的7位

MIDI格式使用该精确编码以以下方式表示MIDI事件的长度:

  • ExpectedValue=0
  • 字节=ReadFromFile
  • ExpectedValue=ExpectedValue+(字节和0x7f)
  • 如果字节>127,则
  • ExpectedValue=ExpectedValue SHL 7
  • 转到2
  • 完成
  • 例如,值0x80将使用字节0x81 0x00表示。你可以试着在这两个字节上运行算法,你会发现你会得到正确的值


    UTF-8的工作原理与此类似,但它使用了稍微复杂一点的方案来告诉您应该期望的字节数。这允许进行一些错误更正,因为您可以很容易地判断得到的字节是否与声明的长度匹配。很好。

    但是当你把比如说1 0 1 1 0 0写入一个文本文件时,它需要8个字节(每个字节一个),而60个只需要2个字节。那么如何节省空间呢。如果您能在您的answer@Programmer当前位置我不确定我是否理解你的问题。可变长度编码只有在讨论二进制数据时才有意义,所以您永远不会将其写入文本文件;您将以二进制形式写入由该系列位表示的字节。