Java и C # - байтовый массив для длинной разницы преобразования - PullRequest
8 голосов
/ 18 февраля 2010

Это странно для меня: когда я бегу на Java

byte[] data = new byte[] { 50, -106, 40, -22, -94, -119, -52, 8 };
ByteBuffer bb = ByteBuffer.wrap( data );
System.out.println( bb.getLong() );

результат 3645145936617393160

когда я бегу в C #

//unsigned values (signed&0xff)
byte[] bytes = new byte[] { 50, 150, 40, 234, 162, 137, 204, 8 };
long l = BitConverter.ToInt64(bytes, 0);
System.Console.Write(String.Format("{0}\n", l));
System.Console.ReadKey();

результат 634032980358633010

Можете ли вы помочь мне понять это?
Спасибо!

1 Ответ

12 голосов
/ 18 февраля 2010

Это разница в endianness .

Если вы перевернете байтовый массив, он будет работать как положено:

BitConverter.ToInt64(new byte[] { 8, 204, 137, 162, 234, 40, 150, 50 }, 0)

Вы можете установить порядок байтов в Javaпозвонив по номеру bb.order(ByteOrder.LITTLE_ENDIAN).

Кстати, самый простой способ поиграть с этими вещами - использовать LINQPad .

...