我需要将存储为 8 个字符的十六进制字符串的大量值转换为 C# 程序中的浮点值。性能至关重要,因为代码每秒会被调用多达 50,000 次。
至于功能,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);
但这非常慢。我尝试使用此处的代码优化它 ,它使用表查找和 c# 指针,并以这种方式调用它:
byte[] raw = FastHex.FromHexString(hex);
float f = BitConverter.ToSingle(raw, 0);
这对于十六进制到字节 [] 的转换非常有用,但仍然涉及非本地字节 [] 数组的创建和销毁。我想知道我是否可以直接从 byte[] 到 FromHexString() 代码末尾的“float”值。也就是说,我希望能够做到:
fixed (float* floatptr = (float*)result)
return *floatptr;
其中 result 是包含结果的字节 [4],但 C# 不喜欢这样......有没有更好的方法?