C#字节[]到长和后
我想把一个给定的字节数组转换成一个int。然后我想反转这个过程。也就是说,我想从int中得到原始字节数组。 我以为这样做会奏效:C#字节[]到长和后,c#,bytearray,C#,Bytearray,我想把一个给定的字节数组转换成一个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[] 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
所以它没有返回原始的字节数组。我做错了什么?您正在使用
数组反转字节。反转没有明显的原因-鉴于您正在使用位转换器
进行到int
和从int
的转换,您根本不需要数组。反转调用
如果要将字节数组视为big-endian,并且要面对一个小endian位转换器
,则必须在两种情况下反转数组,而不仅仅是一种情况。基本上,您应该将位转换器
视为提供可逆转换,但它可能不是您想要的确切转换
如果要为这种转换指定endianness,您可能需要在我的项目中使用myEndianBitConverter
。谢谢您的回答。我对endianess一点也不感兴趣,当我移除数组时,它会输出00-00-00-20。原来的数组是00-00-00-32,所以我仍然没有得到原来的数组。稍后我将尝试使用EndianBitConverter。@乔纳森:不,原始数组实际上是“00-00-00-20”
,因为BitConverter.ToString
将其格式化为十六进制,而您在数组初始值设定项中使用的是十进制文字。PutConsole.WriteLine(“字节数组:+BitConverter.ToString(myBytes))首先,你会明白我的意思。是的,我现在明白了,BitConverter.ToString让我很困惑。谢谢你的帮助!