java变量将int编码延长到2字节
我正在实现可变长度编码并阅读有关它的wikipedia。以下是我的发现:
0x00000080 0x81 0x00
这意味着0x80
int被编码为0x81 0x00
2字节。这是我无法理解的。好的,按照上面列出的算法
- 二进制
0x80
:00000000 00000000 00000000 10000000
我们将符号位移动到下一个八位字节,因此我们有并设置为1(表示我们有更多的八位字节):
00000000 00000000 00000001 10000000
,它不等于0x81 0x00
。我试图为此编写一个程序:byte[] ba = new byte[]{(byte) 0x81, (byte) 0x00}; int first = (ba[0] & 0xFF) & 0x7F; int second = ((ba[1] & 0xFF) & 0x7F) << 7; int result = first | second; System.out.println(result); //prints 1, not 0x80
我错过了什么
# 1 楼答案
整数的另一种可变长度编码存在并被广泛使用。例如ASN。1从1984年起define "length" field作为:
例如,在DLMS COSEM协议或https证书中使用此编码。对于简单的代码,您可以查看ASN.1 java library
# 2 楼答案
让我们回顾一下维基百科页面上的算法:
我们可以实现如下算法:
您可以在维基百科页面here上看到它对示例有效,您也可以插入自己的值并在线尝试