Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将4字节数组转换为浮点时出现问题#_C#_Arrays_Floating Point_Byte - Fatal编程技术网

C# 在C中将4字节数组转换为浮点时出现问题#

C# 在C中将4字节数组转换为浮点时出现问题#,c#,arrays,floating-point,byte,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)和其他方法,但没有成功。 请帮忙。 谢谢 伊格尔 耐力如何?你试过颠倒词序吗?在windows中,533

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

byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43
得到一些乱七八糟的价值。 我使用了
System.BitConverter.ToDouble(bytesArr,0)
和其他方法,但没有成功。 请帮忙。 谢谢 伊格尔

  • 耐力如何?你试过颠倒词序吗?在windows中,533174.1是98,43,2,73
  • 4个字节是单字节,而不是双字节

  • 你的字节被换成了字。此函数应将字节数组正确转换为浮点:

    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
    

    要将具有四个位置的字节数组转换为浮点,应使用convert.ToSingle,此函数读取所用数组中的四个位置,例如:

    var input = new byte[]{103, 242, 50, 67};
    var floatValue = BitConverter.ToSingle(input, 0);
    
    浮动值=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

    二次浮点值=358.4366

    最后,为了从[98,43,2,73]开始获得值533174.1,我们必须使用

    var input = new byte[]{98, 43, 2, 73};
    var floatValue = BitConverter.ToSingle(input, 0);
    
    浮动值=533174.1