我正在從大端的二進制流中讀取數據。 BitConverter類自動執行此操作。不幸的是,我需要的浮點轉換與BitConverter.ToSingle(byte [])不一樣,所以我有來自同事的自己的例程。但輸入字節[]需要小端。有沒有人有一個快速的方法來轉換byte []數組的字節順序。當然,我可以交換每個字節,但必須有一個技巧。謝謝。在C#中從大端到小端交換字節的快速方法
5
A
回答
0
你的同事的例程是什麼樣的?如果顯式訪問字節,則可以更改代碼(或者更確切地說,爲big-endian數據創建一個單獨的方法),而不是顛倒字節。
3
這裏是一個字節數組改變字節序單打的快速方法:
public static unsafe void SwapSingles(byte[] data) {
int cnt = data.Length/4;
fixed (byte* d = data) {
byte* p = d;
while (cnt-- > 0) {
byte a = *p;
p++;
byte b = *p;
*p = *(p + 1);
p++;
*p = b;
p++;
*(p - 3) = *p;
*p = a;
p++;
}
}
}
+0
說我在十六進制輸入是62,4d,00,4e然後輸出我認爲應該是49,62,4e,00,但這可能是因爲我在16位字工作。 SwapSingles返回4e,00,4d,62這不是我所需要的。 – initialZero 2009-10-23 00:07:45
+0
@initialZero:單個是四個字節。那麼,你是沒有字節還是它們不代表Single? – Guffa 2009-10-23 09:00:14
4
我使用LINQ:
var bytes = new byte[] {0, 0, 0, 1};
var littleEndianBytes = bytes.Reverse().ToArray();
Single x = BitConverter.ToSingle(littleEndianBytes, 0);
您也可以.Skip()
和.Take()
你的心臟的內容,否則在BitConverter方法中使用索引。
相關問題
- 1. ASM中的快速小端到大端轉換
- 2. Ç40位字節交換(端)
- 3. 使用opencl交換字節順序的快速方法
- 4. 快速端到端測試
- 5. 是否存在任何方式將TIFF圖像從小端字節順序轉換爲大端字節?
- 6. C/C++代碼轉換大端到小端
- 7. 大端小端轉換
- 8. C#小端或大端?
- 9. 從大端到小端的數據轉換
- 10. 節點快速傳遞變量從客戶端到服務器
- 11. 在VB.NET中預留端口的快速方法
- 12. 在java中快速排序的交換方法
- 13. 在PHP中檢查圖片大小的快速方法
- 14. C - 交換兩個相同大小的內存塊的最快方法?
- 15. C小端,但產生大端結果?
- 16. 大端或小端?
- 17. 快速前端開發解決方案?
- 18. 的Netty 4:是否可以讀取小端和大端字節在同一ByteBuf
- 19. 快速陣列轉換從Java到C++
- 20. Apache訪問日誌高字節大小返回到客戶端
- 21. 轉換小端到大端包括0(零)
- 22. 字節交換和C++/C
- 23. 方法String.getBytes()是大端序還是小端序?
- 24. 如何使用bitConverter.ToInt32方法從c#中的大端排序獲取小端數據?
- 25. 將4字節轉換爲浮點數的最快方法C++
- 26. 創建快速GUI前端
- 27. 混亂htons-小端/大端
- 28. 在Objective-C中交換字節順序?
- 29. 交換端
- 30. 將字節[]字符串轉換爲其整數值的快速方法
我需要預先在消息對象中轉換數組。 – initialZero 2009-10-21 20:14:21
喬恩,不MiscUtil有一個EndianBitConverter? – LBushkin 2009-10-21 20:16:24
@LBushkin:它的確如此,這是我的第一個想法 - 但這聽起來像是一個不同的問題。 – 2009-10-21 20:16:48