2013-05-05 105 views
1

我想將給定的字節數組轉換爲int。然後我想扭轉這個過程。那就是我想從該int中取回原始字節數組。 我覺得這樣的事情會工作:C#byte [] long and back

byte[] myBytes = { 0, 0, 0, 32 }; 
if (BitConverter.IsLittleEndian) 
    Array.Reverse(myBytes); 
int i = BitConverter.ToInt32(myBytes, 0); 
Console.WriteLine("int: {0}", i); // Output: 32 

byte[] newBytes = BitConverter.GetBytes(i); 
Console.WriteLine("byte array: " + BitConverter.ToString(newBytes)); 
// Outputs: 20-00-00-00 

所以也沒有給我回原來的字節數組。我究竟做錯了什麼?

回答

2

你逆轉與Array.Reverse字節沒有明顯的理由 - 因爲你使用BitConverter兩個轉換intint,你不需要Array.Reverse電話都沒有。

如果你想治療的字節數組作爲big-endian和你面對的是一個小端BitConverter,你必須扭轉數組中兩種案件,不只是一個。基本上你應該認爲BitConverter提供了一個可逆轉換,但它可能不是你想要的確切轉換。

如果您想指定這種轉換的字節順序,您可能需要在我的MiscUtil項目中使用我的EndianBitConverter

+0

謝謝你的回答。 我對endianess根本不感興趣,當我刪除Array.reverse時,它輸出00-00-00-20。原來的陣列是00-00-00-32,所以我還沒有得到原來的。 後來我會試試你的EndianBitConverter。 – Jonathan 2013-05-05 12:06:48

+1

@Jonathan:不,原來的數組實際上是''00-00-00-20'',因爲'BitConverter.ToString'使用十六進制格式,而在數組初始值設定項中使用* decimal * literal。把'Console.WriteLine(「字節數組:」+ BitConverter.ToString(myBytes));'開始,你會明白我的意思。 – 2013-05-05 12:08:22

+0

是的,我現在看到,BitConverter.ToString令我困惑。感謝您的幫助! – Jonathan 2013-05-05 12:17:19