c# - 将 long 转换为字节数组时 C# 和 Java 之间的差异

标签 c# java arrays

我没有使用 Java 的经验,所以这让我头疼:-

Java 代码:

long foo = 1234567890;
byte[] boo = ByteBuffer.allocate(8).putLong(foo).array();

C#代码:

long foo = 1234567890;
byte[] bar = BitConverter.GetBytes(foo);

// reverse to match Java's Big Endianess
byte[] boo = bar.Reverse().ToArray();

在 Java 示例中,boo = 0, 0, 0, 0, 73, -106, 2, -46

但是在 C# 中,boo = 0, 0, 0, 0, 73, 150, 2, 210

有没有脑洞大点的人,解释一下为什么会有所不同?

非常感谢!

最佳答案

Java 使用有符号字节,C# 使用无符号字节。请注意,所有小于 127 的值都匹配,大于 128 的值将转换为负数。如果将 C# 数组从 byte 转换为 sbyte,则值将匹配。

关于c# - 将 long 转换为字节数组时 C# 和 Java 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476939/

相关文章:

c# - 事件的 SynchronizingObject

c# - 带有可选参数的 ViewComponent

java - 如何计算List中某个元素出现的次数

java - 将文本文件中的分隔数据读取到不同的 RDD 中

java - 使用Java可搜索的行级加密?

c# - 当一个值被设置为 null 时,幕后会发生什么?

c# - Entity Framework Core InMemory 数据库测试在并行运行时会中断

c - 创建整数数组时出现溢出?

将字节数组转换为c中的结构体

c - 效率 : char array vs int array