我正在使用C#并从某个控制器读取字节数组并将它们转换为它们的类型。除浮点值外,所有值(int,string)都可以。 假设得到的值是533174.1。 但是在读数组时
byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43
获得一些胡言乱语的价值。
我使用System.BitConverter.ToDouble(bytesArr,0)
和其他方法没有成功。
请帮忙。
谢谢,
有约色。
答案 0 :(得分:15)
你的字节出现了字交换。此函数应将您的字节数组正确转换为浮点数:
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
答案 1 :(得分:2)
答案 2 :(得分:0)
要将一个具有四个位置的字节数组转换为浮点型,应使用Convert.ToSingle,此函数读取所使用的数组中的四个位置,例如:
var input = new byte[]{103, 242, 50, 67};
var floatValue = BitConverter.ToSingle(input, 0);
floatValue = 178.946884
Convert.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);
firtsFloatValue = 178.946884
secondFloatValue = 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