如何将有符号字节数组转换为浮点数

本文关键字:数组 转换 浮点数 字节数 字节 符号 | 更新日期: 2023-09-27 18:01:33

我刚刚对如何将4个有符号字节的数组转换为浮点数感到困惑。

我只知道对于一个无符号字节数组,我可以使用这个函数

BitConverter.ToSingle(bts, 0);

然而,它看起来像BitConverter。ToSingle只接受字节数组而不是字节数组。

谁能给我一些建议?

谢谢!

如何将有符号字节数组转换为浮点数

可能是:

float num = 0;
for (int i = 0; i < sbytesArr.Length; i++)
{
     num = (num | sbytesArr[i]) << i * 4;
}
    Float value = 5000.1234;
//
// Invoke BitConverter.GetBytes to convert double to bytes.
//
byte[] array = BitConverter.GetBytes(value);
foreach (byte element in array)
{
    Console.WriteLine(element);
}
//
// You can convert the bytes back to a double.
//
Float result = BitConverter.Tofloat(array, 0);
Console.WriteLine(result);

假设您的有符号字节位于名为sbts的数组中,您可以首先转换为无符号字节数组,然后使用BitConverter.ToSingle()

byte[] bts = new byte[sbts.Length];
Buffer.BlockCopy(sbts, 0, bts, 0, sbts.Length);
float f = BitConverter.ToSingle(bts, 0);

一个鲜为人知的事实是,bytesbyte在CLR水平上是可互换的:

sbyte[] a = new sbyte[1];
byte[] b = (byte[])(object)a;

这段代码实际上在运行时工作。所以可以传入你的数组

BitConverter.ToSingle((byte[])(object)bts, 0);

调用GetFloatValue方法,传递一个包含四个字节的数组作为参数

    public float GetFloatValue(sbyte[] data)
    {
        return bytesToFloat(data[0], data[1], data[2], data[3]);
    }
    private static float bytesToFloat(sbyte b0, sbyte b1, sbyte b2, sbyte b3)
    {
        int mantissa = (byte)b0 + ((byte)b1 << 8) + ((byte)b2 << 16);
        return (float)(mantissa * Math.Pow(10, b3));
    }