我很难将此ActionScript代码转换为C#。我不明白我怎么能模仿ByteArray()在C#中做的事情。如果有人可以帮我重新创建这个功能,我真的很感激。
ActionScript(seed
是一个uint。):
//Start by reversing the byte order of the seed
var ba:ByteArray = new ByteArray();
ba.endian = Endian.BIG_ENDIAN;
ba.writeInt(seed);
ba.position = 0;
ba.endian = Endian.LITTLE_ENDIAN;
seed = ba.readInt();
答案 0 :(得分:17)
您可以使用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;
}
这是您需要知道的,以了解这里发生了什么:
&
)保留两个输入中设置的位: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个位置,使其成为第1个字节。然后(value & 0x0000FF00U) << 8
将除第3个字节之外的所有内容都清零,然后将其向左移动,使其成为第二个字节。等等。四个(x & y) << z
创建四个UInt32,其中每个字节已移动到它们将处于反转值的位置。最后,|
将这些UIntt32s字节重新组合成一个值。