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:
constchar* result ="";float resistance =2.5;
result = resistance;//This bit (obviously) doesn't work
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).
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
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).
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
sumber
const
kunci tidak membuat variabel hanya-baca. Variabel di sini adalah pointer, dan tidak perlu konstan. Kataconst
kunci 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 sebagaichar * const result
(atauconst char * const result
jika Anda inginconst
pointer keconst
data).