Bagaimana cara mengubah float menjadi char *?

11

Mengajukan pertanyaan ini pada Rekayasa Stack Exchange dan diarahkan di sini:

Cukup jelas; bagaimana saya bisa mengubah float menjadi char *? Saya memiliki kode di mana 'resistensi' float terus diperbarui. Saya ingin dapat memperbarui variabel 'hasil' untuk mengambil nilai 'perlawanan'. Berikut adalah beberapa kode, jika itu membantu:

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

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

Terima kasih atas bantuan Anda!

higgsboson
sumber

Jawaban:

15

Ada fungsi di perpustakaan Arduino standar yang disebut dtostrf(). Saya menganggapnya sebagai "Desimal ke String Float". Anda melewati float, seberapa lebar Anda ingin seluruh bilangan menjadi (jika sesuai), jumlah desimal presisi - dan buffer yang Anda inginkan untuk diisi.

Catat itu! Anda perlu menyediakan buffer, dan Anda harus berhati-hati untuk menyediakan lebih dari cukup! Jangan lupa untuk menambahkan 1 juga (untuk menyimpan karakter NUL di akhir):

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

Ini akan memberi resultnilai seperti " 1.23"dan " -1.23"dan "123456789"(tanpa tanda kutip). Perhatikan contoh terakhir - itu tidak akan memotong angkanya jika terlalu besar, dan 10 karakter itu result(jangan lupa final NUL) hanya meluap buffer Anda ...

Kebetulan, jika Anda menentukan lebar negatif, itu tidak akan membenarkan-kanan jawabannya, itu akan-membenarkan itu (menempatkan spasi di bagian akhir daripada di awal).

John Burger
sumber
Melakukan trik dengan baik! Terima kasih banyak, tuan :)
higgsboson
-2

Pada dasarnya Anda mencoba mengubah variabel 4-byte (float) menjadi string 4-byte (variabel char berukuran 1-byte). Info lebih lanjut tentang tipe data Arduino di sini http://playground.arduino.cc/Code/DatatypePractices

Anda dapat mencoba jawaban atas pertanyaan-pertanyaan ini /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Saya akui bahwa saya bingung dengan penggunaan const char * result = "";contoh Anda.

Kata kunci "const" menjadikan variabel sebagai "hanya-baca" dan karenanya Anda tidak dapat memodifikasinya. https://www.arduino.cc/en/Reference/Const

Sunting: Sayangnya saya tidak memiliki perangkat Arduino sekarang untuk menguji diri saya solusi di atas

evgi9
sumber
1
Kata constkunci tidak membuat variabel hanya-baca. Variabel di sini adalah pointer, dan tidak perlu konstan. Kata constkunci memenuhi syarat data yang diarahkan , bukan penunjuk itu sendiri. Dengan kata lain, Anda tidak diizinkan untuk memodifikasi string melalui pointer itu. Jika Anda menginginkan pointer konstan, nyatakan sebagai char * const result(atau const char * const resultjika Anda ingin constpointer ke constdata).
Edgar Bonet