2013-05-25 36 views
0

爲什麼這個程序不能正常工作?我將一個字節數組轉換爲long。然後從長我轉換回一個字節數組。生成的字節數組與原始數據不一樣。C#字節[]長反轉不起作用

class Program 
{ 
    static void Main(string[] args) 
    { 
     byte[] myBytes = { 0, 0, 0, 32, 56, 99, 87, 34, 56, 56, 34, 33, 67 
         , 56, 66, 72, 1, 0, 0, 56, 0, 22}; 

     long data = BitConverter.ToInt64(myBytes, 0); 

     byte[] byteData = BitConverter.GetBytes(data); 

     Console.WriteLine("byte array: " + BitConverter.ToString(myBytes)); 
     Console.WriteLine("byte array: " + BitConverter.ToString(byteData)); 
    } 
} 
+10

由於方法名稱('ToInt64')意味着long是64位(8字節)長。 – I4V

+1

它不*工作*但* *不按預期工作*。 –

+0

是的,你在那個數組中有22個字節,int64是8.爲什麼你要轉換成長呢? –

回答

0

字節長度超過long可容納(8字節,64位)。

對於替代解決方案,如果您的目標框架高於(包括).Net 4.0,我會建議使用BigInteger

4

由於l4V已經gave正確的假設,我只是想添加它作爲一個aswer,但我認爲我的答案不值得任何投票,因爲所有upvotes應該去l4V。 Upvote他的評論。

BitConverter.ToInt64

ToInt64方法從索引的startIndex字節轉換爲 的startIndex + 7到Int64值。

所以基本上,這種對話只需要8byte陣列的字節(0, 0, 0, 32, 56, 99, 87, 34)。在這種情況下,數組的其他字節將被忽略。