这对我来说很奇怪: 当我在 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
你能帮我理解一下吗?
谢谢!
最佳答案
这是endianness的区别.
如果反转字节数组,它会按预期工作:
BitConverter.ToInt64(new byte[] { 8, 204, 137, 162, 234, 40, 150, 50 }, 0)
您可以通过调用 bb.order(ByteOrder.LITTLE_ENDIAN)
在 Java 中设置字节序.
顺便说一句,玩这些东西最简单的方法是使用LINQPad .
关于c# - Java和C#——字节数组到长转换的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289427/