Jak przekonwertować zmiennoprzecinkowe na char *?

11

Zadałem to pytanie na temat wymiany stosów w inżynierii elektrycznej i został skierowany tutaj:

Dość oczywiste; jak miałbym zamiar przekształcić zmiennoprzecinkowe w char *? Mam kod, w którym „opór” pływaka jest ciągle aktualizowany. Chciałbym móc zaktualizować zmienną „wynik”, aby przyjąć wartość „oporności”. Oto część kodu, na wypadek gdyby to pomogło:

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

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

Dzięki za pomoc!

bozon Higgsa
źródło

Odpowiedzi:

15

W standardowej bibliotece Arduino znajduje się funkcja o nazwie dtostrf(). Myślę o tym jako o „Decimal to String Float”. Podajesz liczbę zmiennoprzecinkową, jak szeroka ma być liczba całkowita (jeśli będzie pasować), liczba miejsc dziesiętnych precyzji - i bufor, który chcesz wypełnić.

Uwaga! Musisz podać bufor i musisz uważać, aby dostarczyć więcej niż wystarczająco! Nie zapomnij również dodać 1 (aby zapisać znak NUL na końcu):

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

W ten sposób resultwartości, jak " 1.23"i " -1.23"i "123456789"(bez cudzysłowów). Zwróć uwagę na ostatni przykład - nie skróci liczby, jeśli jest zbyt duża, a ten 10- znakowy result(nie zapomnij o finale NUL) właśnie przepełnił Twój bufor ...

Nawiasem mówiąc, jeśli podasz ujemną szerokość, nie uzasadni ona odpowiedzi od prawej, wyjustuje ją do lewej (wstawiaj spacje na końcu zamiast na początku).

John Burger
źródło
Świetnie sobie poradził! Dziękuję bardzo proszę pana :)
higgsboson
-2

Zasadniczo próbujesz przekonwertować zmienną 4-bajtową (zmiennoprzecinkową) na łańcuch 4-bajtowy (zmienne char mają wielkość 1-bajtową). Więcej informacji o typach danych Arduino tutaj http://playground.arduino.cc/Code/DatatypePractices

Możesz spróbować odpowiedzi na te pytania /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Przyznaję, że jestem zdezorientowany używaniem const char * result = "";twojego przykładu.

Słowo kluczowe „const” powoduje, że zmienna jest „tylko do odczytu” i dlatego nie można jej modyfikować. https://www.arduino.cc/en/Reference/Const

Edycja: Niestety nie mam teraz urządzenia Arduino do przetestowania powyższych rozwiązań

evgi9
źródło
1
Słowo constkluczowe nie powoduje, że zmienna jest tylko do odczytu. Zmienna tutaj jest wskaźnikiem i nie musi być stała. Słowo constkluczowe kwalifikuje wskazane dane , a nie sam wskaźnik. Innymi słowy, nie wolno modyfikować ciągu poprzez ten wskaźnik. Jeśli chcesz mieć stały wskaźnik, zadeklaruj go jako char * const result(lub const char * const resultjeśli chcesz constwskaźnik do constdanych).
Edgar Bonet