什麼是將int []數組寫入byte []數組,但只有LSB(最後8位)最快的方法?我使用for
循環和位掩碼bArray[i] = (byte)(iArray[i] & 0xFF)
,但數組很長(+ 900k),這需要大約50ms。你知道其他更快的選擇嗎?c#int [] array to byte [] array只有LSB
1
A
回答
1
您可以嘗試並行工作量:
Parallel.For(0,iArray.Length, i => bArray[i] = (byte)(iArray[i] & 0xFF));
這將產生多個線程來完成轉換。它傾向於在我的機器上更快,但由於產生多個線程的開銷,有時需要更長的時間。
你在做什麼,50ms太慢?緩慢的
+0
我想顯示圖像數組,但我的功能只需要字節作爲參數 - 256灰度就足夠了,比16位更快。 – Archont
1
部分來自於需要讀更多的數據比你需要:當你做
array[i] & 0xFF
閱讀了整個4個字節的int
的,砸三個最顯著的。
您可以通過不安全的代碼避免這種開銷。請注意,下面的方法假設小端架構:
static unsafe void CopyLsbUnsafe(int[] from, byte[] to) {
fixed (int* s = from) {
fixed (byte* d = to) {
byte* sb = (byte*) s;
int* db = (int*)d;
int* end = db + to.Length/4;
while (db != end) {
*db++ = (*(sb + 0) << 0)
| (*(sb + 4) << 8)
| (*(sb + 8) << 16)
| (*(sb + 12) << 24);
sb += 16;
}
}
}
}
上面的代碼重新解釋int
陣列作爲一個字節數組,以及字節的數組作爲整數數組。然後它使用一個指針讀取每個第4個字節到目標數組中,使用一個整數指定以四個字節爲一組寫入目標。
我的測試顯示,在一個簡單的循環中,可觀的60%的改進。
相關問題
- 1. Byte Array to Float Conversion C#
- 2. Uuencoded image to byte array
- 3. vbscript serialize integer to byte array
- 4. Byte Array to Uint64 as a String
- 5. Byte Array to Bitmap Image android
- 6. .Net C#to PHP Pb byte [] array&ComputeHash
- 7. Java字節Array to signed Int
- 8. PHP array to multidimensional array
- 9. TrueType to C Array
- 10. C#int to byte []
- 11. Array of Array to Json
- 12. Array [Byte] Spark RDD to String Spark RDD
- 13. Picture VS Byte Array?
- 14. scala Array [Byte] diff
- 15. Array to LinkedList in C++
- 16. 如何在C++中聲明byte *(byte array)?
- 17. Buggy String Array to Double Array Conversion
- 18. Java(BigInteger from byte array)
- 19. Java版本的c#Array.Copy(Array sourceArray,int sourceIndex,Array destinationArray,int destinationIndex,int length)
- 20. Byte array java xml serialization
- 21. Java Parse Json Byte Array
- 22. Array to javascript
- 23. Convert Array to DayOfWeek
- 24. Byte Array to Image然後顯示在對話框C++
- 25. 我需要將org.apache.spark.rdd.RDD [Array [Byte]]轉換爲Spark Streaming中的Array [Byte]
- 26. PHP array to objective-c NSArray(Xcode)
- 27. lodash object to array
- 28. array to string(php)
- 29. Numpy matrix to array
- 30. Octave - array to number
你是說你想將int數組中的每個int的LSB放入字節數組中嗎? – bpgeck
您需要處理將近一百萬個項目的速度超過50毫秒......您是否想過並行化爲GPU?除此之外,我認爲你可能遇到CPU限制 –
@bpgeck yes,int數組中的每個int的LSB到字節數組。即將16位int數組的200個LSB值分配給200個8位字節數組。 – Archont