2010-02-18 1 views
8

이 나에게 이상하다 : 나는 자바에서 실행할 때 나는 C#자바와 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(); 
을에서 실행할 때

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

결과가 3645145936617393160

입니다

결과는 634032980358633010

이 점에 대해 알려주세요.
감사합니다.

답변

12

endianness의 차이점입니다. 당신이 바이트 배열을 반대로하면

, 그것은 예상대로 작동합니다

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

당신은 bb.order(ByteOrder.LITTLE_ENDIAN)를 호출하여 자바 엔디안을 설정할 수 있습니다.

그런데 가장 쉬운 방법은 LINQPad을 사용하는 것입니다.

+2

특히 Java는 내부적으로 Big Endian으로 항목을 저장하지만 x86 프로세서는 Little Endian입니다. 아마도 .NET의 설계는이를 반영합니다. – Powerlord

+0

감사합니다. 좋은 소식입니다! –