【问题标题】:Byte array to float要浮动的字节数组
【发布时间】:2019-12-30 17:21:06
【问题描述】:

我正在尝试将浮点数转换为长度为 4 的字节数组,然后再返回。但我似乎没有用。

这是我所做的:

byte[] b = BitConverter.GetBytes(90);
float fb = BitConverter.ToSingle(b, 0);

我预计 fb = 90,但它是 1.26E-43。

我知道我的转换器是小端的,所以我也尝试过反转数组,像这样:

byte[] b = BitConverter.GetBytes(90);
Array.Reverse(b);
float fb = BitConverter.ToSingle(b, 0);

然后我得到了答案 fb = 9.0E+15。

有什么想法吗? 提前致谢!

【问题讨论】:

  • 90int,而不是 float90ffloat。无论哪种情况,您在这里所做的任何事情都可能是错误的——偶尔需要使用BitConverterfloat 转换为字节,但对于大多数序列化目的而言,它实际上不是正确的工具.

标签: c# bitconverter


【解决方案1】:

BitConverter.GetBytes(90); 将为您提供90整数 值的字节。由于您需要 float 值的字节,因此您需要指定:

BitConverter.GetBytes((float)90.0);

BitConverter.GetBytes(90.0f);

【讨论】:

    【解决方案2】:

    90 是一个被编译器解释为Int32 的文字,而不是Single。所以你调用了GetBytes()的错误重载。

    使用:byte[] b = BitConverter.GetBytes(90f);

    告诉编译器你想调用GetBytes(float)

    【讨论】:

      【解决方案3】:

      您需要更改 GetBytes 上的输入,它现在是一个整数。

      它现在正在获取有关如何存储整数的字节,并将其解释为如何将浮点数存储在内存中。

      将其更改为浮点数。

      试试:

      byte[] b = BitConverter.GetBytes(90f);  // <-- add an f for floats.
      Array.Reverse(b);
      float fb = BitConverter.ToSingle(b, 0);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 2014-02-22
        相关资源
        最近更新 更多