Как мне преобразовать число с плавающей точкой в ​​char *?

11

Задавал этот вопрос по обмену стека электротехники и был направлен сюда:

Довольно понятен; как бы я преобразовал float в char *? У меня есть код, в котором поплавок «сопротивление» постоянно обновляется. Я хотел бы иметь возможность обновить переменную «результат», чтобы принять значение «сопротивления». Вот часть кода, на случай, если это поможет:

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

Спасибо за вашу помощь!

бозон Хиггса
источник

Ответы:

15

В стандартной библиотеке Arduino есть функция, которая называется dtostrf(). Я думаю об этом как «Десятичное число в строку». Вы передаете число с плавающей запятой, какой ширины вы хотите, чтобы было целое число (если оно будет соответствовать), количество десятичных знаков точности - и буфер, который вы хотите заполнить.

Обратите внимание, что! Вы должны предоставить буфер, и вы должны быть осторожны, чтобы предоставить более чем достаточно! Не забудьте также добавить 1 (чтобы сохранить символ NUL в конце):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

Это даст resultзначения как " 1.23"и " -1.23"и "123456789"(без кавычек). Обратите внимание на последний пример - он не будет усекать число, если оно слишком большое, и этот 10- символьный result(не забудьте последний NUL) просто переполнил ваш буфер ...

Кстати, если вы укажете отрицательную ширину, он не будет выравнивать по правому краю ответ, он будет выравнивать по левому краю (ставьте любые пробелы в конце вместо начала).

Джон Бургер
источник
Сделал трюк красиво! Большое спасибо добрый сэр :)
Higgsboson
-2

Обычно вы пытаетесь преобразовать 4-байтовую переменную (float) в 4-байтовую строку (переменные char имеют размер 1 байт). Больше информации о типах данных Arduino здесь http://playground.arduino.cc/Code/DatatypePractices

Вы можете попробовать ответы на эти вопросы /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

/programming/24420246/c-function-to-convert-float-to-byte-array

Я признаю, что меня смущает использование const char * result = "";в вашем примере.

Ключевое слово "const" делает переменную доступной только для чтения, и поэтому вы не можете ее изменить. https://www.arduino.cc/en/Reference/Const

Изменить: К сожалению, у меня нет устройства Arduino прямо сейчас, чтобы проверить себя вышеупомянутые решения

evgi9
источник
1
constКлючевое слово никак не делает переменную только для чтения. Переменная здесь является указателем, и она не должна быть постоянной. constКлючевое слово имеет право на данные, указывают на , а не сам указатель. Другими словами, вам не разрешено изменять строку через этот указатель. Если вам нужен постоянный указатель, объявите его как char * const result(или const char * const resultесли вы хотите constуказатель на constданные).
Эдгар Бонет