Math 有没有办法将任何数字编码成一系列8位数字,包括一个终止字符?
所以我想把数字编码成小到0,高到非常高(32位,64位,其他8位倍数…)。简单的方法是只使用计算机体系结构对“字”大小或任何东西的内置支持,例如32位或64位是常见情况,因此整数限制在该大小。但我想做一个理论上的事情,看看是否有一种方法可以使用8位数字序列对任意大的数字进行编码 但是作为一个警告,我想知道我们什么时候到达了字节流中一个数的末尾。因此,您可能有以下字节流:Math 有没有办法将任何数字编码成一系列8位数字,包括一个终止字符?,math,encoding,bit-manipulation,byte,Math,Encoding,Bit Manipulation,Byte,所以我想把数字编码成小到0,高到非常高(32位,64位,其他8位倍数…)。简单的方法是只使用计算机体系结构对“字”大小或任何东西的内置支持,例如32位或64位是常见情况,因此整数限制在该大小。但我想做一个理论上的事情,看看是否有一种方法可以使用8位数字序列对任意大的数字进行编码 但是作为一个警告,我想知道我们什么时候到达了字节流中一个数的末尾。因此,您可能有以下字节流: nbbbbbbbbbbbbnnnnnbbbnnbnnnnnnnnnbbbbbbbnnbnnbb …其中,n是数字,b是一个任
nbbbbbbbbbbbbnnnnnbbbnnbnnnnnnnnnbbbbbbbnnbnnbb
…其中,n
是数字,b
是一个任意字节(这张图与我说的不太准确。n
在顺序上会相当少,而b
会相对大得多)。问题是,n
是它前面的字节数b
。这样你就可以做到:
n
序列来读取数字n
序列有什么办法可以做到这一点吗?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
?