您可以使用BitConverter.GetBytes(UInt32)
来获取您的byte[]
,然后调用Array.Reverse
数组,然后使用BitConverter.ToUInt32(byte[])
来获取您的 int 。
编辑
这是一种更有效和更神秘的方法:
public static UInt32 ReverseBytes(UInt32 value)
{
return (value & 0x000000FFU) << 24 | (value & 0x0000FF00U) << 8 |
(value & 0x00FF0000U) >> 8 | (value & 0xFF000000U) >> 24;
}
这是您需要了解的了解这里发生的事情:
- UInt32 是 4 个字节。
- 在十六进制中,两个字符代表一个字节。十进制的 179 == 十六进制的 B3 == 二进制的 10110011。
- 按位和 ( ) 保留在两个输入
&
中设置的位:十六进制:.1011 0011 & 1111 0000 = 1011 0000
B3 & F0 = B0
- 按位或 ( ) 保留在任一输入
|
中设置的位:以十六进制表示,.1111 0000 | 0000 1111 = 1111 1111
F0 | 0F = FF
- 移位运算符 (
<<
和>>
) 在一个值中向左或向右移动位。所以0011 1100 << 2 = 1111 0000
和1100 0011 << 4 = 0011 0000
。
所以value & 0x000000FFU
返回一个 UInt32,除了第 4 个字节之外的所有字节都设置为 0。然后<< 24
将第 4 个字节向左移动 24 位,使其成为第一个字节。然后 (value & 0x0000FF00U) << 8
将除第三个字节之外的所有内容清零并将其向左移动,因此它是第二个字节。等等。这四个(x & y) << z
创建了四个 UInt32,其中每个字节都已移动到它们将在反转值中的位置。最后,|
将这些 UIntt32s 字节重新组合成一个值。