ฉันจะแปลง float เป็น char * ได้อย่างไร


11

ถามคำถามเกี่ยวกับการแลกเปลี่ยนกองวิศวกรรมไฟฟ้าและได้ที่นี่:

สวยด้วยตนเองอธิบาย ฉันจะเปลี่ยนแปลงให้เป็น char * ได้อย่างไร? ฉันมีรหัสที่ 'ความต้านทาน' แบบลอยได้รับการปรับปรุงอยู่ตลอดเวลา ฉันต้องการจะอัปเดตตัวแปร 'ผลลัพธ์' เพื่อรับค่าของ 'ความต้านทาน' นี่คือรหัสบางส่วนในกรณีที่ช่วย:

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

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

ขอบคุณสำหรับความช่วยเหลือของคุณ!

คำตอบ:


15

มีฟังก์ชั่นในห้องสมุด Arduino dtostrf()มาตรฐานที่เรียกว่าเป็น ฉันคิดว่ามันเป็น "ทศนิยมให้กับสตริงลอย" คุณผ่านไปในโฟลตคุณต้องการให้จำนวนทั้งหมดเป็นเท่าไร (ถ้ามันพอดี) จำนวนทศนิยมที่มีความแม่นยำ - และบัฟเฟอร์ที่คุณต้องการเติม

ทราบว่า! คุณต้องจัดเตรียมบัฟเฟอร์และคุณต้องระมัดระวังในการจัดเตรียมมากเกินพอ! อย่าลืมเพิ่ม 1 ด้วย (เพื่อเก็บอักขระ NUL ไว้ท้าย):

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

สิ่งนี้จะให้resultค่าเช่น" 1.23"และ" -1.23"และ"123456789"(โดยไม่มีเครื่องหมายคำพูด) สังเกตตัวอย่างสุดท้าย - มันจะไม่ตัดทอนหมายเลขถ้ามันใหญ่เกินไปและอักขระ10ตัวresult(อย่าลืมขั้นสุดท้ายNUL) เพียงแค่บัฟเฟอร์ของคุณล้น ...

บังเอิญถ้าคุณระบุความกว้างเชิงลบมันจะไม่จัดชิดคำตอบที่ถูกต้องมันจะทำให้ชิดขอบ (วางช่องว่างใด ๆ ในท้ายแทนที่จะเป็นจุดเริ่มต้น)


เคล็ดลับทำอย่างดี! ขอบคุณมากครับท่าน :)
higgsboson

-2

โดยทั่วไปคุณกำลังพยายามแปลงตัวแปร 4 ไบต์ (ลอย) เป็นสตริง 4 ไบต์ (ตัวแปรถ่านมีขนาด 1 ไบต์) ข้อมูลเพิ่มเติมเกี่ยวกับชนิดข้อมูล Arduino ที่นี่http://playground.arduino.cc/Code/DatatypePractices

คุณสามารถลองตอบคำถามเหล่านี้ได้ที่ /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

ฉันยอมรับว่าฉันสับสนโดยการใช้const char * result = "";ตัวอย่างของคุณ

คำหลัก "const" ทำให้ตัวแปรเป็น "อ่านอย่างเดียว" ดังนั้นคุณจึงไม่สามารถแก้ไขได้ https://www.arduino.cc/en/Reference/Const

แก้ไข: น่าเสียดายที่ฉันไม่มีอุปกรณ์ Arduino ในตอนนี้เพื่อทดสอบตัวเองกับวิธีแก้ไขปัญหาข้างต้น


1
constคำหลักไม่ได้ทำให้ตัวแปรอ่านอย่างเดียว ตัวแปรที่นี่คือตัวชี้และไม่จำเป็นต้องมีค่าคงที่ constคำหลักที่มีคุณสมบัติข้อมูลที่ถูกชี้ไปไม่ได้ชี้ตัวเอง กล่าวอีกนัยหนึ่งคุณไม่ได้รับอนุญาตให้แก้ไขสตริงผ่านตัวชี้นั้น ถ้าคุณต้องการตัวชี้คงที่ประกาศเป็นchar * const result(หรือconst char * const resultถ้าคุณต้องการconstตัวชี้ไปยังconstข้อมูล)
Edgar Bonet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.