Şamandırayı char * 'a nasıl dönüştürebilirim?


11

Elektrik Mühendisliği Yığın Borsası ile ilgili bu soruyu sordu ve buraya yönlendirildi:

Oldukça açıklayıcı; bir şamandırayı bir char * 'a nasıl çevirebilirim? Şamandıra 'direnci' sürekli güncellenmektedir kod var. 'Direnç' değerini almak için 'sonuç' değişkenini güncelleyebilmek istiyorum. Yardımcı olması durumunda koddan bazıları:

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

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

Yardımın için teşekkürler!

Yanıtlar:


15

Standart Arduino kütüphanesinde bir fonksiyon var dtostrf(). Ben "String Float ondalık" olarak düşünüyorum. Şamandırayı, tam sayının ne kadar geniş olmasını istediğinizi (uygunsa), ondalık kesinlik sayısını ve doldurmasını istediğiniz arabelleği geçirirsiniz.

Bunu not et! Tamponu sağlamanız ve fazlasıyla yeterli olmanız için dikkatli olmanız gerekiyor! 1 eklemeyi de unutmayın (sonunda NUL karakterini saklamak için):

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

Bu, ve ve (tırnak işaretleri olmadan) resultgibi değerler verecektir . Son örneğe dikkat edin - çok büyükse sayıyı kesmez ve bu 10- karakter (finali unutmayın ) ara belleğinizden taştı ..." 1.23"" -1.23""123456789"resultNUL

Bu arada, negatif bir genişlik belirtirseniz, cevabı doğru olarak haklı çıkarmaz, sola yaslar (başlangıç ​​yerine sonuna boşluk koyar).


Hile güzel yaptı! Çok teşekkür ederim efendim :)
higgsboson

-2

Temel olarak 4 baytlık bir değişkeni (float) 4 baytlık bir dizeye dönüştürmeye çalışıyorsunuz (char değişkenleri 1 bayt boyutunda). Arduino veri türleri hakkında daha fazla bilgi burada http://playground.arduino.cc/Code/DatatypePractices

Bu soruların cevaplarını deneyebilirsiniz /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Örneğinizin kullanımıyla karıştırıldığımı itiraf ediyorum const char * result = "";.

"Const" anahtar kelimesi değişkeni "salt okunur" yapar ve bu nedenle değiştiremezsiniz. https://www.arduino.cc/en/Reference/Const

Edit: Ne yazık ki şu anda kendime yukarıdaki çözümleri test etmek için bir Arduino cihazı yok


1
constYok kelime değil değişken hale salt okunur. Buradaki değişken bir göstericidir ve sabit olması gerekmez. constAnahtar kelime nitelendirir veri işaret ediliyor pointer kendisi değil. Başka bir deyişle, bu işaretçi aracılığıyla dizeyi değiştirmenize izin verilmez. Sabit bir işaretçi istiyorsanız, char * const result(veya verilere işaretçi const char * const resultistiyorsanız ) constbildirin const.
Edgar Bonet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.