我将如何切换ByteArray?

时间:2015-04-02 01:53:31

标签: c# bytearray

我正在寻找一种如何将整个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。

1 个答案:

答案 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;
        }
    }