2015-04-02 15 views
-2

我正在尋找一種方法,如何字節切換整個ByteArray。舉例來說,如果我有以下順序(!比如我有一個有規模超過300個字節的文件)是這樣的:我將如何bytewap一個ByteArray?

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字節碼。我想要像上面顯示的那樣字節數組。

+3

爲什麼要轉換成ushort和小提琴?只需循環遍歷數組,步驟爲2,並隨時切換元素 – Blorgbeard 2015-04-02 01:57:01

+0

如果數組的長度不是偶數而是奇數,您想要執行什麼操作? – BitTickler 2015-04-02 02:06:36

+0

@Blorgbeard因爲這就是我的彙編程序的構建。它適用於BitArrays。一個用於登記,一個用於指示。我後來追加它們直到達到32位,然後將它們轉換爲一個bytearray,然後進行如上所示的交換。但是,在這種情況下,它不再適用,因爲我想字節整個大於4個字節的二進制文件。所以我想bytewap一個bytearray。 (我把二進制文件讀入一個bytearray) – Tetragrammaton 2015-04-02 02:07:48

回答

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; 
     } 
    } 
相關問題