我正在使用C#从某个控制器读取字节数组,并将它们转换为它们的类型。所有的值(int、string)都没问题,除了float类型的值。 应该得到的值是533174.1。 但是在读取数组时,
byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43
获取了一些无用的数值。我试过使用System.BitConverter.ToDouble(bytesArr,0)
以及其他方法,但都没有成功。请帮忙解决。谢谢,Igal。
我正在使用C#从某个控制器读取字节数组,并将它们转换为它们的类型。所有的值(int、string)都没问题,除了float类型的值。 应该得到的值是533174.1。 但是在读取数组时,
byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43
获取了一些无用的数值。我试过使用System.BitConverter.ToDouble(bytesArr,0)
以及其他方法,但都没有成功。请帮忙解决。谢谢,Igal。
你的字节序是倒置的。这个函数应该可以正确地将你的字节数组转换为浮点数:
static float ToFloat(byte[] input)
{
byte[] newArray = new[] { input[2], input[3], input[0], input[1] };
return BitConverter.ToSingle(newArray, 0);
}
ToFloat(new byte[]{2,73,98,43}) == 533174.1
var input = new byte[]{103, 242, 50, 67};
var floatValue = BitConverter.ToSingle(input, 0);
floatValue = 178.946884
BitConverter.ToSingle方法接收两个参数:字节数组和开始取值的位置。
我们也可以使用长度更长的数组,并定义从哪里开始转换。
var secondInput = new byte[]{103, 242, 50, 67, 227, 55, 179, 67};
var firtsFloatValue = BitConverter.ToSingle(input, 0);
var secondFloatValue = BitConverter.ToSingle(input, 4);
第一个浮点数值为178.946884
第二个浮点数值为358.4366
最终从[98, 43, 2, 73]开始获得值533174.1,我们必须使用
var input = new byte[]{98, 43, 2, 73};
var floatValue = BitConverter.ToSingle(input, 0);
floatValue = 533174.1