我想将给定的字节数组转换为int。然后,我想撤消该过程。那就是我想从该int取回原始字节数组。
我以为这样的事情会起作用:
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
因此,它不会给我原始的字节数组。我究竟做错了什么?
最佳答案
没有明显的原因,您正在使用Array.Reverse
反转字节-假设您同时使用BitConverter
转换为int
和从int
进行转换,则不需要在Array.Reverse
处调用所有。
如果要将字节数组视为big-endian,并且遇到了little-endian BitConverter
,则在两种情况下都必须反转数组,而不仅仅是一种情况。基本上,您应该将BitConverter
视为可逆转换,但它可能并非您想要的确切转换。
如果要为这种转换指定字节顺序,则可能要在我的MiscUtil项目中使用我的EndianBitConverter
。
关于c# - C#字节[]长后退,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16384224/