0

我正在寻找一些可以提供函数的库,这些函数可以帮助将 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

我必须“重新发明轮子”吗?

4

1 回答 1

1

干得好:

    Long aD = 2147483647L;
    //encode
    Long aE = (aD >> 31) ^ (aD << 1);
    //decode
    Long bD = (aE >> 1) ^ -(aE & 1);

    System.out.println(aD + "," + aE + "," + bD);
于 2018-06-09T10:55:26.993 回答