如何将有符号字节数组转换为浮点数
本文关键字:数组 转换 浮点数 字节数 字节 符号 | 更新日期: 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);
一个鲜为人知的事实是,byte
和sbyte
在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));
}