c# - Java和C#——字节数组到长转换的区别

标签 c# java numbers bytearray

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

相关文章:

java - 在java中创建一个同时具有char和int的矩阵

java - 如何在IIOMetadata中嵌入ICC_Profile(Adobe98)并使用ImageIO写入PNG?

java - 为什么数字类的 valueOf/parse 方法拒绝 Java 7 中的有效数字?

javascript - 为什么这个数字会增加一个?

perl - 如何将像 "1..15,16"这样的字符串扩展为数字列表?

c# - 在应用程序中创建/编译 .net 数据类

c# - 允许鼠标消息的子集通过 WPF 中的控件

java - Selenium Webdriver 的鼠标悬停功能不适用于 Opera 39,并且与 Chrome 53 的工作不一致

c# - 当用户输入时,字符串的其余部分消失

c# - 在从 C++ 转换为 C# 的代码中,我应该使用什么来代替 memcpy?