在C#中将4字节数组转换为float的问题

时间:2010-11-29 07:19:11

标签: c# arrays floating-point byte

我正在使用C#并从某个控制器读取字节数组并将它们转换为它们的类型。除浮点值外,所有值(int,string)都可以。 假设得到的值是533174.1。 但是在读数组时

byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43
获得一些胡言乱语的价值。 我使用System.BitConverter.ToDouble(bytesArr,0)和其他方法没有成功。 请帮忙。 谢谢, 有约色。

3 个答案:

答案 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)

  1. endianess怎么样?你试过逆转单词顺序吗?在Windows中,533174.1是98,43,2,73。
  2. 4个字节是单个(ToSingle),而不是double。

答案 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