我正在寻找一种如何将整个ByteArray换成字节的方法。例如,如果我有以下顺序(例如!我的文件大小超过300字节),如下所示:
80 37 12 40
并将其加载到ByteArray中。我该怎么换呢:
37 80 40 12
在我的项目中,通常的长度是4个字节。因此,解决这个问题并不困难:
public static ushort SwapBytes(ushort x)
{
return (ushort)((ushort)((x & 0xff) << 8) | ((x >> 8) & 0xff));
}
byte[] rev = Assembler.Operations.ToByteArray(towrite);
byte[] half = new byte[2];
byte[] half2 = new byte[2];
ushort tt = BitConverter.ToUInt16(rev, 0);
tt = SwapBytes(tt);
half = BitConverter.GetBytes(tt);
Start.fs.Write(half, 0, 2);
所以,但是现在如果我有一个超过400字节的二进制文件怎么办?我不能只做一个ushort byteswap。我想像上面所示的那样对整个bytearray进行byteswap。
答案 0 :(得分:1)
只需在循环中交换相邻字节即可。无需转换为ushort并摆弄面具。
static void SwapByteArray(byte[] a)
{
// if array is odd we set limit to a.Length - 1.
int limit = a.Length - (a.Length % 2);
if (limit < 1) throw new Exception("array too small to be swapped.");
for (int i = 0; i < limit - 1; i = i + 2)
{
byte temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}