ZigZag декодировать / кодировать в Java - PullRequest
0 голосов
/ 09 июня 2018

Я ищу библиотеку, которая может предоставить функции, которые помогут разделить зигзагообразный байтовый массив на 2 дополнения long / int и обратно.

Поскольку ZigZag используется в protobuf Я ожидал, что в guava есть что-то для этого, но поиск в Google не дал никакого результата.Под кодировкой ZigZag я имею в виду следующее:

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

Нужно ли "изобретать велосипед"?

1 Ответ

0 голосов
/ 09 июня 2018

Вот, пожалуйста:

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

    System.out.println(aD + "," + aE + "," + bD);
...