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);