代码之家  ›  专栏  ›  技术社区  ›  Runsva

将字节数组转换为浮点的正确方法?(阿杜伊诺)

  •  1
  • Runsva  · 技术社区  · 2 年前

    我正试图转换一个4的数组 byte 值到单个 float Arduino中的值。

    我正在使用 union 以便存储我的值,并且我能够转换 long 浮动 那样。

    这是代码:

    union value {
      float f;
      unsigned long l;
      byte b[4];
    } value;
    
    void setup() 
    {
      Serial.begin(9600);
    
      // Setting 105.00 to the value variable via modifying the field "l"
      value.l = 0x42D20000;
      Serial.println("\nFloat value: " + String(value.f));
      Serial.print("Byte values: {");
    
      for (int i = 0; i < 4; i++) 
      {
        Serial.print(value.b[i], HEX);
        Serial.print(", ");
      }
      
      Serial.println("}");
      
      // Setting 4.55 to the value variable via modifying the field "b"
      value.b[0] = 0X40;
      value.b[1] = 0X91;
      value.b[2] = 0X99;
      value.b[3] = 0X9A;
      
      Serial.println("Float value: " + String(value.f));
      Serial.print("Byte values: {");
    
      for (int i = 0; i < 4; i++) 
      {
        Serial.print(value.b[i], HEX);
        Serial.print(", ");
      }
    
      Serial.println("}");
    }
    
    void loop()
    {
    }
    

    我首先尝试将105的值代入 l 字段,然后读取 f 领域这似乎是成功的,我在中获得了所需的105.00 f 字段,如果我试着从中阅读。

    但是,我随后想将4.55的值分配给 f 字段中的每个字节条目 b 数组字段。这似乎不起作用,我在 f 字段,如果我试着从中阅读。

    这是上面显示的代码的当前输出:

    Float value: 105.00
    Byte values: {0, 0, D2, 42, }
    Float value: -0.00
    Byte values: {40, 91, 99, 9A, }
    

    当单个字节成功保存在 b 字段 f 字段似乎不会自动更新。

    关于为什么我不能获得4.55作为我的 f 字段在上面代码的后半部分?

    感谢您阅读我的文章,如有任何指导,不胜感激。

    2 回复  |  直到 2 年前
        1
  •  4
  •   Maks Verver    2 年前

    CPU可能是小端序,这意味着最低有效字节存储在开头。

    你试过这个吗:

    value.b[3] = 0X40;
    value.b[2] = 0X91;
    value.b[1] = 0X99;
    value.b[0] = 0X9A;