0

我需要将存储为 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# 不喜欢这样......有没有更好的方法?

4

2 回答 2

0
        // This works for a two byte string, possibly more ;-)
        string hex = "FF";
        //
        float f = (float) Convert.ToInt32(hex, 16);
        //
        // f is now 255, yahoo!
于 2013-02-07T13:04:06.190 回答
0

我认为这可能会奏效:

float f = (float)System.Net.IPAddress.NetworkToHostOrder(
    BitConverter.ToInt32(bytes, 0));
于 2013-02-05T23:56:05.097 回答