Java中的锯齿形解码/编码
我正在寻找一些可以提供函数的库,这些函数可以帮助将锯齿形编码的字节数组分解为2的长/整数补码 由于在中国使用了“之”字,我原以为番石榴有它的味道,但谷歌并没有给出任何结果。所谓之字形编码,我的意思是:Java中的锯齿形解码/编码,java,long-integer,zigzag-encoding,Java,Long Integer,Zigzag Encoding,我正在寻找一些可以提供函数的库,这些函数可以帮助将锯齿形编码的字节数组分解为2的长/整数补码 由于在中国使用了“之”字,我原以为番石榴有它的味道,但谷歌并没有给出任何结果。所谓之字形编码,我的意思是: Signed Original Encoded As 0 0 -1 1 1 2 -2 3 2147483647 4294967294 -2147483648 4294967
Signed Original Encoded As
0 0
-1 1
1 2
-2 3
2147483647 4294967294
-2147483648 4294967295
我必须重新发明轮子吗?给你:
Long aD = 2147483647L;
//encode
Long aE = (aD >> 31) ^ (aD << 1);
//decode
Long bD = (aE >> 1) ^ -(aE & 1);
System.out.println(aD + "," + aE + "," + bD);
它不是一个大轮子,2行代码。@n也不是2行。看着它的实现,我发现它非常可怕。然后向下滚动。好的,它是python,但是没有任何东西没有1:1的Java等价物-bit@Arijoon这不适用于9或10字节的长度。问题是它不适用于编码为9或10字节的长度。如果要处理任意长度的数字,可以继续并调整BigInteger类型。