有没有办法以比特序列存储任意大的BIGINT,仅稍后将其转换为标准的BIGINT结构?
-
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 ,代表大整数是常见的事情。
不隶属于 cs.stackexchange