Как мне преобразовать число с плавающей точкой в char *?
11
Задавал этот вопрос по обмену стека электротехники и был направлен сюда:
Довольно понятен; как бы я преобразовал float в char *? У меня есть код, в котором поплавок «сопротивление» постоянно обновляется. Я хотел бы иметь возможность обновить переменную «результат», чтобы принять значение «сопротивления». Вот часть кода, на случай, если это поможет:
constchar* result ="";float resistance =2.5;
result = resistance;//This bit (obviously) doesn't work
В стандартной библиотеке 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
constКлючевое слово никак не делает переменную только для чтения. Переменная здесь является указателем, и она не должна быть постоянной. constКлючевое слово имеет право на данные, указывают на , а не сам указатель. Другими словами, вам не разрешено изменять строку через этот указатель. Если вам нужен постоянный указатель, объявите его как char * const result(или const char * const resultесли вы хотите constуказатель на constданные).
Обычно вы пытаетесь преобразовать 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 прямо сейчас, чтобы проверить себя вышеупомянутые решения
источник
const
Ключевое слово никак не делает переменную только для чтения. Переменная здесь является указателем, и она не должна быть постоянной.const
Ключевое слово имеет право на данные, указывают на , а не сам указатель. Другими словами, вам не разрешено изменять строку через этот указатель. Если вам нужен постоянный указатель, объявите его какchar * const result
(илиconst char * const result
если вы хотитеconst
указатель наconst
данные).