我需要將很多存儲爲8字符十六進制字符串的值轉換爲C#程序中的浮點值。性能至關重要,因爲代碼將被調用至每秒50,000次。高性能8字節十六進制浮點值轉換?
至於功能,在Python代碼:
f = struct.unpack('<f', bytes.fromhex(strng))[0]
做什麼,我需要的。我已經嘗試了「無聊」版本:
byte[] raw = BitConverter.GetBytes(int.Parse(hex, NumberStyles.HexNumber));
Array.Reverse(raw);
float f = BitConverter.ToSingle(raw, 0);
但這是非常慢。我曾嘗試使用here 和使用查表和C#指針的代碼進行優化,並調用它是這樣的:
byte[] raw = FastHex.FromHexString(hex);
float f = BitConverter.ToSingle(raw, 0);
這是偉大的hext到字節[]轉換,但仍然涉及非本地byte []數組的創建和銷燬。我想知道我是否可以直接從字節[]到FromHexString()代碼末尾的「float」值。也就是說,我希望能夠做到:
fixed (float* floatptr = (float*)result)
return *floatptr;
,其中結果是[4]包含結果的字節,但C#不喜歡......有沒有更好的辦法?
所以你的十六進制字符串都在MSB到LSB的順序? –
他們來自運行在英特爾PC上的外部應用程序.Python的「
rivimey