Проблема в том, что эта строка Java:
output = output + encodedBytes[i] * multiplier;
несколько отличается от этой строки кода C #:
output = output + encodedBytes[i] * Multiplyer;
В частности, неявное преобразование encodedBytes[i]
изbyte
до long
(Java) или Int64
(C #) немного отличаются.
В Java вы видите byte
значение со знаком между -128
и 127
, тогда как в C # это значение без знака между 0
и 255
.Так, например, если encodedBytes[i]
равно B2
(1011 0010
), то Java интерпретирует это как -78, а C # интерпретирует это как 178.
Чтобы эмулировать интерпретацию C # в Java, вы можетенапишите что-то вроде этого:
output = output + ((encodedBytes[i] + 256) % 256) * multiplier;
(К счастью, Java имеет ту же обработку переполнения целых чисел, что и режим "unchecked" в C #, который, по-видимому, используется;подражать было гораздо сложнее, если бы пришлось.)