#c #floating-point #bitwise-operators #eeprom #pic24
#c #с плавающей запятой #побитовые операторы #eeprom #pic24
Вопрос:
Я пытаюсь преобразовать float в побитовое значение int в C. Вот мой фрагмент кода:
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_HIGH_INT, (unsigned int) (temperature_offset>>16));
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_LOW_INT, (unsigned int) (temperature_offset));
Я получаю следующую ошибку:
error: invalid operands to binary >> (have 'float' and 'int'),
при попытке компиляции. Здесь temperature_offset — это тип с плавающей запятой, и я пытаюсь использовать его как high int и low int, поскольку я пытаюсь сохранить данные в EEPROM в 16-битных фрагментах (поскольку я использую 16-разрядный микроконтроллер). Я знаю, что ‘>>’ не применяется к типам с плавающей запятой. Как я могу исправить эту проблему?
Ответ №1:
Создайте отдельную unsigned int
переменную и memcpy
значение с плавающей запятой в ней, затем поработайте над этим.
unsigned int temperature_offset_int;
memcpy(amp;temperature_offset_int, amp;temperature_offset, sizeof(temperature_offset));
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_HIGH_INT, temperature_offset_int >> 16);
write_eeprom(INDEX_CONFIG_TEMPERATURE_OFFSET_LOW_INT, temperature_offset_int amp; 0xffff);
Комментарии:
1. вероятно, вам нужно убедиться, что
int
он имеет тот же размер,float
что и . В противном случае это выглядит лучше, чем мой слабый ответ 🙂