【发布时间】:2018-06-09 10:43:21
【问题描述】:
我正在寻找一些可以提供函数的库,这些函数可以帮助将 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
我必须“重新发明轮子”吗?
【问题讨论】:
-
不是大轮子,2行代码。
-
@NiVeR 不完全是 2 行。查看它的实现,我发现它非常可怕。
-
gist.github.com/mfuerstenau/ba870a29e16536fdbaba 并向下滚动。好的,它是 python,但没有什么不是 1:1 Java 等价物。
-
你链接的页面有你的答案:
(n << 1) ^ (n >> 63)for 64-bit -
@Arijoon 不适合 9 或 10 字节的长度。
标签: java long-integer zigzag-encoding