将long转换为byte数组时C#和Java之间的差异

时间:2011-03-29 18:07:12

标签: c# java bytearray

我没有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,71,150,2,210

有大脑的人可以解释为什么这些不同吗?

非常感谢!

1 个答案:

答案 0 :(得分:12)

Java使用带符号的字节,C#使用无符号。注意,所有值< 127匹配,值> 128被转换为负数。如果您将C#数组从byte转换为sbyte,则值将匹配。