Разница между C # и Java при преобразовании long в байтовый массив - PullRequest
1 голос
/ 29 марта 2011

У меня нет опыта работы с Java, поэтому все идет прямо к моей голове: -

Код Java:

long foo = 1234567890;
byte[] boo = ByteBuffer.allocate(8).putLong(foo).array();

Код C #:

long foo = 1234567890;
byte[] bar = BitConverter.GetBytes(foo);

// reverse to match Java's Big Endianess
byte[] boo = bar.Reverse().ToArray();

В примере Java boo = 0, 0, 0, 0, 73, -106, 2, -46

Однако в C # boo = 0, 0, 0, 0, 73, 150, 2, 210

Может кто-то с большим мозгом, объяснить, почему они отличаются?

Большое спасибо!

1 Ответ

12 голосов
/ 29 марта 2011

Java использует подписанные байты, C # использует unsigned.Обратите внимание, что все значения <127 совпадают, а значения> 128 преобразуются в отрицательное число.Если вы преобразовали массив C # из byte в sbyte, значения будут совпадать.

...