繁体   English   中英

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

[英]problem converting 4-bytes array to float in C#

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

byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43

得到一些胡言乱语的价值。 我使用System.BitConverter.ToDouble(bytesArr,0)和其他方法没有成功。 请帮忙。 谢谢,伊加尔。

你的字节是字交换出来的。 此函数应将您的字节数组正确转换为浮点数:

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. 字节序怎么样? 你试过颠倒语序吗? 在 Windows 中,533174.1 是 98、43、2、73。
  2. 4 个字节是单字节(ToSingle),而不是双字节。

要将具有四个位置的字节数组转换为浮点数,应使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM