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

Math 有没有办法将任何数字编码成一系列8位数字,包括一个终止字符?,math,encoding,bit-manipulation,byte,Math,Encoding,Bit Manipulation,Byte,所以我想把数字编码成小到0,高到非常高(32位,64位,其他8位倍数…)。简单的方法是只使用计算机体系结构对“字”大小或任何东西的内置支持,例如32位或64位是常见情况,因此整数限制在该大小。但我想做一个理论上的事情,看看是否有一种方法可以使用8位数字序列对任意大的数字进行编码 但是作为一个警告,我想知道我们什么时候到达了字节流中一个数的末尾。因此,您可能有以下字节流: nbbbbbbbbbbbbnnnnnbbbnnbnnnnnnnnnbbbbbbbnnbnnbb …其中,n是数字,b是一个任

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

但是作为一个警告,我想知道我们什么时候到达了字节流中一个数的末尾。因此,您可能有以下字节流:

nbbbbbbbbbbbbnnnnnbbbnnbnnnnnnnnnbbbbbbbnnbnnbb
…其中,
n
是数字,
b
是一个任意字节(这张图与我说的不太准确。
n
在顺序上会相当少,而
b
会相对大得多)。问题是,
n
是它前面的字节数
b
。这样你就可以做到:

  • 以某种方式组合
    n
    序列来读取数字
  • 跳过该字节数以进入下一个
    n
    序列
  • 重复一遍
  • 问题分为两部分:

  • 如何计算8位整数序列中的数字
  • 这样,您也知道什么时候您已经到达了“数字”编码的末尾,现在处于“任意字节”编码部分。不知何故,当您到达数字编码的末尾时,您需要保留一些要标记的密钥或位,但我还没有弄明白这一点

  • 有什么办法可以做到这一点吗?

    MSB first 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 };
    }
    
    函数解码(字节,索引){
    指数|=0;
    var值=0n;
    变量t;
    做{
    t=字节[index++];
    值=(值=0x80);
    返回{value:value,index:index};
    }
    

    “结束”位置也会被返回。它实际上是数据中下一个东西的位置。

    保留一点来表示结尾是VLQ如何工作的,所以这个想法确实是正确的,并且正在使用中。还有其他方案。你还没有弄明白什么?太棒了,就是这样!我不知道它实际上是一个东西。谢谢。它没有说如何实际使用c把整数组合成一个整体?对我来说不够健壮。你想要什么作为输出,一个
    BigInt