如何将有符号字节数组转换为float?

时间:2014-05-03 11:41:28

标签: c# arrays

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

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

BitConverter.ToSingle(bts, 0);

但是,看起来BitConverter.ToSingle只接受字节数组而不是sbyte数组。

有人可以给我一些想法吗?

谢谢!

5 个答案:

答案 0 :(得分:1)

也许这个:

float num = 0;

for (int i = 0; i < sbytesArr.Length; i++)
{
     num = (num | sbytesArr[i]) << i * 4;
}

答案 1 :(得分:1)

    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);

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

It is a little known fact that byte and sbyte are interchangeable at the CLR level

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

此代码实际上在运行时有效。所以可以传入你拥有的数组。

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

答案 4 :(得分: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));
    }