有没有办法以比特序列存储任意大的BIGINT,仅稍后将其转换为标准的BIGINT结构?

cs.stackexchange https://cs.stackexchange.com/questions/128035

  •  29-09-2020
  •  | 
  •  

我试图想象一种将BIGINT编码成位流的方式,因此它实际上只是一系列比特。然后在解码该位流时,您将生成标准的BIGINT类型数据结构(带有标志的小整数数组)。如何将BIGINT作为一系列位编码,以及您会如何解码它?我没有看到如何正确地执行按位操作或如何在大于32或64的比特中编码任意数字。如果需要语言,那么我将在JavaScript中执行此操作。

例如,这需要字节并将其转换为单个比特流:

function arrayOfBytesTo32Int(map) {
  return map[0] << 24
    | map[1] << 16
    | map[2] << 8
    | map[3]
}
.

您如何为任意长位序列进行同样的事情?

有帮助吗?

解决方案

查看elias delta或伽玛编码作为一个例子。

其他提示

许多常用编码用于任意长度整数。我会说最常用的表示是:

  • 长度数据表示,首先写入字节/单词的数量,然后是数据。
  • “延续位”表示。如果字大小是 B 位,则整数被分成 B-1 位的组,其中高阶位表示是否存在另一个字节。

可以混合并匹配这些。 ASN.1基本编码规则是在一定位置的情况下,在一般情况下,长度字段使用换符位在基座128中编码。 ASN.1 BER用于许多网络协议,例如VoIP,SNMP和LDAP,以及 cryptography ,代表大整数是常见的事情。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top