Java 之字折线 decode/encode
ZigZag decode/encode in Java
我正在寻找一些可以提供函数的库,这些函数可以帮助将 zig-zag 编码的字节数组分解为 2 的补码 long
/int
并返回。
由于在 protobuf 中使用了 ZigZag,我希望 guava 有它的用途,但谷歌搜索没有给出任何结果。通过 ZigZag 编码,我的意思是:
Signed Original Encoded As
0 0
-1 1
1 2
-2 3
2147483647 4294967294
-2147483648 4294967295
我必须 "reinvent the wheel" 吗?
给你:
Long aD = 2147483647L;
//encode
Long aE = (aD >> 31) ^ (aD << 1);
//decode
Long bD = (aE >> 1) ^ -(aE & 1);
System.out.println(aD + "," + aE + "," + bD);
我正在寻找一些可以提供函数的库,这些函数可以帮助将 zig-zag 编码的字节数组分解为 2 的补码 long
/int
并返回。
由于在 protobuf 中使用了 ZigZag,我希望 guava 有它的用途,但谷歌搜索没有给出任何结果。通过 ZigZag 编码,我的意思是:
Signed Original Encoded As
0 0
-1 1
1 2
-2 3
2147483647 4294967294
-2147483648 4294967295
我必须 "reinvent the wheel" 吗?
给你:
Long aD = 2147483647L;
//encode
Long aE = (aD >> 31) ^ (aD << 1);
//decode
Long bD = (aE >> 1) ^ -(aE & 1);
System.out.println(aD + "," + aE + "," + bD);