¿Cómo convierto un flotador en char *?


11

Hice esta pregunta sobre el intercambio de pila de ingeniería eléctrica y fue dirigida aquí:

Bastante autoexplicativo; ¿Cómo haría para convertir un flotador en un char *? Tengo un código en el que la 'resistencia' flotante se actualiza constantemente. Me gustaría poder actualizar la variable 'resultado' para tomar el valor de 'resistencia'. Aquí está parte del código, en caso de que ayude:

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

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

¡Gracias por tu ayuda!

Respuestas:


15

Hay una función en la biblioteca estándar de Arduino llamada dtostrf(). Pienso en ello como "Decimal to String Float". Usted pasa en el flotador, qué tan ancho desea que sea el número entero (si cabe), el número de decimales de precisión y el búfer que desea que llene.

¡Tenga en cuenta que! ¡Debe proporcionar el búfer y debe tener cuidado de proporcionar más que suficiente! No olvide agregar 1 también (para almacenar el carácter NUL al final):

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

Esto dará resultvalores como " 1.23"y " -1.23"y "123456789"(sin las comillas). Tenga en cuenta el último ejemplo: no truncará el número si es demasiado grande, y ese carácter de 10result (no olvide el final NUL) simplemente desbordó su búfer ...

Por cierto, si especifica un ancho negativo, no justificará a la derecha la respuesta, la justificará a la izquierda (coloque los espacios al final en lugar del principio).


Hizo el truco muy bien! Muchas gracias señor amable :)
higgsboson 01 de

-2

Básicamente, está intentando convertir una variable de 4 bytes (flotante) en una cadena de 4 bytes (las variables char tienen un tamaño de 1 byte). Más información sobre los tipos de datos Arduino aquí http://playground.arduino.cc/Code/DatatypePractices

Puede probar las respuestas a estas preguntas /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Admito que estoy confundido por el uso de const char * result = "";en su ejemplo.

La palabra clave "const" hace que la variable sea "solo lectura" y, por lo tanto, no puede modificarla. https://www.arduino.cc/en/Reference/Const

Editar: Desafortunadamente, no tengo un dispositivo Arduino en este momento para probarme las soluciones anteriores


1
La constpalabra clave no hace que la variable sea de solo lectura. La variable aquí es un puntero, y no necesita ser constante. La constpalabra clave califica los datos que se apuntan , no el puntero en sí. En otras palabras, no está permitido modificar la cadena a través de ese puntero. Si desea un puntero constante, declare como char * const result(o const char * const resultsi desea un constpuntero a los constdatos).
Edgar Bonet
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.