2013-05-25 39 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)。在这种情况下,数组的其他字节将被忽略。