我是编程新手,我不擅长指针和打字,所以我需要一些帮助。
我使用的是IAR Workbench和STM32L475。
在从Eeprom加载4个字节后,我试图将结构中的4个字节转换为浮点。
我知道在大/小尾数和代码到其他micro的可移植性方面可能会有挑战,但请不要把这个线程和那个弄得乱七八糟,因为这对我来说现在并不重要。
我做错什么了,谢谢你的帮助?
请保持简单,并解释“为傻瓜”。
我有pe513错误。
我的代码:

struct Test {
    uint8_t Byte1;
    uint8_t Byte2;
    uint8_t Byte3;
    uint8_t Byte4;
} TestStruct;

float x = 0.0;

uint8_t *TestStruct_ptr;

int main(void)
{
    /* USER CODE BEGIN 1 */
    TestStruct.Byte1 = 0x41; //float value = 23.10
    TestStruct.Byte2 = 0xB8;
    TestStruct.Byte3 = 0xCC;
    TestStruct.Byte4 = 0xCD;

    TestStruct_ptr = (float*)&TestStruct;

    x = (float*) TestStruct_ptr;

    // some code



    return 0;
}

编辑:
我正在从Eeprom加载一个数组,必须将一个由4个uint8字节组成的数组“收集”到一个浮点,它们在保存到Eeprom之前是结构的一部分。
明天上班的时候我会更新错误信息。
我最后用了“联合”这个词,因为这似乎是最好的解决办法。
我的示例代码现在如下所示:
union Eeprom {
  struct {
    uint8_t Byte1;
    uint8_t Byte2;
    uint8_t Byte3;
    uint8_t Byte4;
  };
  float x;
  uint8_t Array[4];
};


int main(void)
{

  union Eeprom Test;

  //assign values to individual bytes
  Test.Byte1=0xCD;
  Test.Byte2=0xCC;
  Test.Byte3=0xB8;
  Test.Byte4=0x41;

  //Assign values as an array (here individual bytes, overwrites above assigned values).
  //Data will be formatted as an array when loaded from E2prom.
  Test.Array[0]=0xCD;
  Test.Array[1]=0xCC;
  Test.Array[2]=0xB8;
  Test.Array[3]=0x41;

  //Assign value as floating point value (overwrites the above assigned values)
  Test.x = 23.1;

  printf("FPvalue %3.2f \n Byte1 %x\n Byte2 %x\n Byte3 %x\n Byte4 %x\n
    Array[0] %x\n Array[1] %x\n Array[2] %x\n Array[3] %x\n",
    Test.x, Test.Byte1, Test.Byte2, Test.Byte3, Test.Byte4,
    Test.Array[0], Test.Array[1], Test.Array[2], Test.Array[3]);
}

输出如下:
floatvalue 23.10
Byte1 cd
Byte2 cc
Byte3 b8
Byte4 41
Array[0] cd
Array[1] cc
Array[2] b8
Array[3] 41

最佳答案

你可以使用工会:

typedef union
{
    struct
    {
        uint8_t Byte1;
        uint8_t Byte2;
        uint8_t Byte3;
        uint8_t Byte4;
     };
     float      floatvalue;
}TestT;

TestT   Test;

Test.floatvalue = ......    //complete float
Test.Byte1 = .....          //single Byte to save in EEPROM

关于c - 将4个整数的结构转换为浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51841142/

10-10 23:10