代码之家  ›  专栏  ›  技术社区  ›  Some Name

Java中的锯齿形译码

  •  0
  • Some Name  · 技术社区  · 7 年前

    我在找一些库,它可以提供帮助将Zig-ZAG编码的字节数组分解为2的补码的函数。 long / int 然后回来。

    因为在 protobuf 我原以为番石榴有什么用,但谷歌没有给出任何结果。我所说的曲折编码是指:

    Signed Original Encoded As
    0               0
    -1              1
    1               2
    -2              3
    2147483647      4294967294
    -2147483648     4294967295
    

    我需要“重新发明轮子”吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   NiVeR    7 年前

    干得好:

        Long aD = 2147483647L;
        //encode
        Long aE = (aD >> 31) ^ (aD << 1);
        //decode
        Long bD = (aE >> 1) ^ -(aE & 1);
    
        System.out.println(aD + "," + aE + "," + bD);
    
    推荐文章