C#字节[]到长和后

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

我想把一个给定的字节数组转换成一个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

所以它没有返回原始的字节数组。我做错了什么?

您正在使用
数组反转字节。反转
没有明显的原因-鉴于您正在使用
位转换器
进行到
int
和从
int
的转换,您根本不需要
数组。反转
调用

如果要将字节数组视为big-endian,并且要面对一个小endian
位转换器
,则必须在两种情况下反转数组,而不仅仅是一种情况。基本上,您应该将
位转换器
视为提供可逆转换,但它可能不是您想要的确切转换


如果要为这种转换指定endianness,您可能需要在我的项目中使用my
EndianBitConverter

谢谢您的回答。我对endianess一点也不感兴趣,当我移除数组时,它会输出00-00-00-20。原来的数组是00-00-00-32,所以我仍然没有得到原来的数组。稍后我将尝试使用EndianBitConverter。@乔纳森:不,原始数组实际上是
“00-00-00-20”
,因为
BitConverter.ToString
将其格式化为十六进制,而您在数组初始值设定项中使用的是十进制文字。Put
Console.WriteLine(“字节数组:+BitConverter.ToString(myBytes))