2012-05-22 66 views
3

由於數組必須轉換爲字節數組,因此數據來自程序外部。如何有效地做到這一點?同樣,是否有方法可以選擇Little Endian或Big Endian類型的轉換。如何將長數組轉換爲字節數組?

+1

你的意思是說,源數組中的每個'long'應該變成目標數組中的8個字節? (並且轉換過程應該能夠處理不同的字節順序?) – LukeH

+0

@baraban ....數據是一個很長的數組還是很長的? – MikeTWebb

+1

請給出一個給定的輸入和它的輸出將是一個明確的例子。 – Gabe

回答

4

你可以做這樣一個long陣列轉換爲byte陣列:

bool isLittleEndian = true; 
byte[] data = new byte[longData.Length * 8]; 
int offset = 0; 
foreach (long value in longData) { 
    byte[] buffer = BitConverter.GetBytes(value); 
    if (BitConverter.IsLittleEndian != isLittleEndian) { 
    Array.Reverse(buffer); 
    } 
    buffer.CopyTo(data, offset); 
    offset += 8; 
} 

這通常是足夠有效的。如果你需要它更快,你應該在不安全的代碼塊中使用指針。

+0

你認爲如果輸入數組是IsLittleEndian,可以使用非託管memcpy嗎?是否有任何樣品如何做到這一點? – baraban

+1

@baraban:如果源和目的地址字段相同,則可以使用非託管塊拷貝。 – Guffa

+1

Buffer.BlockCopy? – baraban