我对如何将4个有符号字节的数组转换为浮点数感到困惑。
我只知道一个无符号字节bts数组,可能我可以使用这个函数
BitConverter.ToSingle(bts, 0);
但是,看起来BitConverter.ToSingle只接受字节数组而不是sbyte数组。
有人可以给我一些想法吗?
谢谢!
答案 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));
}