2011-03-29 24 views
1

我不是在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樣品,噓聲= 0,0,0,0,73,-106,2,-46

然而在C#,噓聲= 0,0,0 ,0,73,150,2,210

有人可以有更大的大腦,解釋爲什麼這些不同嗎?

非常感謝!

回答

12

Java正在使用帶符號字節,C#使用無符號。請注意,所有值都匹配,值> 128將轉換爲負數。如果將C#數組從byte轉換爲sbyte,則值將匹配。

+0

正是。 C#中相應的數據類型是「sbyte」(有符號字節)。 – Heinzi 2011-03-29 18:12:49

+0

更具體:對於值大於127的值,Java值是將C#值減去256. – 2011-03-29 18:13:47

+0

這是一個絕妙且快速的答案,非常感謝! – isNaN1247 2011-03-29 18:19:34