Java和C# – 字节数组到长转换差异

这对我来说很奇怪:当我在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

你能帮我理解一下吗?
谢谢!

这是字节序的差异。

如果你反转字节数组,它按预期工作:

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

您可以通过调用bb.order(ByteOrder.LITTLE_ENDIAN)在Java中设置字节序。

顺便说一句,玩这些东西的最简单方法是使用LINQPad 。