Как преобразовать 32-битное целое число в float
Я пытаюсь считывать данные с датчика, используя связь I2C. Выходные данные-это четыре из одного байта, которые равны 0x43, 0xDB, 0x8C, 0X2E соответственно.
Поэтому я успешно прочитал эти значения отдельно. Когда я пытаюсь объединить и преобразовать его в действительное число. Выходное значение не такое, как я ожидал:
Значение, считываемое с датчика, равно: 0x43DB8C2E
Согласно техническому паспорту, это большой Эндиан и соответствует 439.09.
Но то, что я получил на выходе, - это 29650.
Что я уже пробовал:
Я попробовал пример кода из таблицы данных о том, как считывать это значение. Но результат все равно не тот, что я хочу.
// CO2 concentration float co2Concentration; unsigned int tempU32; // read data is in a buffer. In case of I2C CRCs have been removed // beforehand. Content of the buffer is the following unsigned char buffer[4]; buffer[0] = 0x43; // MMSB CO2 buffer[1] = 0xDB; // MLSB CO2 buffer[2] = 0x8C; // LMSB CO2 buffer[3] = 0x2E; // LLSB CO2 // cast 4 bytes to one unsigned 32 bit integer tempU32 = (unsigned int)((((unsigned int)buffer[0]) << 24) | (((unsigned int)buffer[1]) << 16) | (((unsigned int)buffer[2]) << 8) | ((unsigned int)buffer[3])); // cast unsigned 32 bit integer to 32 bit float co2Concentration = *(float*)&tempU32; // co2Concentration = 439.09f
я печатаю значение концентрации CO2 и оно составляет 29650