有没有办法将任何数字编码为一系列8位数字,包括一个终止字符?

所以我想编码小到0的数字,以及大到很高的数字(32位,64位,其他8位倍数...)。一种简单的方法是仅使用计算机体系结构对“字”大小或其他大小的内置支持,因此常见的情况是像32位或64位,因此将整数限制为该大小。但是我想做一个理论上的事情,看看是否有一种方法可以使用8位数字序列对任意大数字进行编码。

但请注意,我想知道何时到达字节流中的数字的末尾。因此,您可能会有以下字节流:

nbbbbbbbbbbbbnnnnnbbbnnbnnnnnnnnnbbbbbbbnnbnnbb

......,其中n是数字,b是一个任意字节(此绘图与我所说的不太准确。n在序列,而b相对要大得多)。问题是, n是它前面的字节b 。因此,您可以这样做:

  1. 通过某种方式组合n的序列来读取数字。
  2. 跳过该字节数即可到达n的下一个序列。
  3. 重复。

问题分为两个部分:

  1. 如何计算8位整数序列中的数字?
  2. 这样,您也知道何时到达“数字”编码的结尾,现在位于“任意字节”编码部分。到达数字编码的结尾时,您需要某种方式保留一些键号或位来标记,但是我还没有弄清楚。

任何想法如何做到这一点?

code9528cpp 回答:有没有办法将任何数字编码为一系列8位数字,包括一个终止字符?

MSB优先的VLQ可以这样解码为BigInt:

function decode(bytes,index) {
    index |= 0;
    var value = 0n;
    var t;
    do {
        t = bytes[index++];
        value = (value << 7n) | BigInt(t & 0x7F);
    } while (t >= 0x80);
    return { value: value,index: index };
}

还返回“结束”位置。确实是数据中下一件事的位置。

本文链接:https://www.f2er.com/3024936.html

大家都在问