Arduino:
การแทรกค่าลงในสตริง
วิธีการ:
Arduino ไม่มีฟีเจอร์การใส่ค่าตัวแปรลงในสตริงเป็นค่าปริยาย แต่คุณสามารถได้ผลลัพธ์ที่คล้ายคลึงกันโดยใช้ sprintf()
หรือโดยการผูกสตริงและตัวแปรเข้าด้วยกัน
char buffer[50]; // ตรวจสอบให้แน่ใจว่าขนาดนี้เพียงพอที่จะจุสตริงสุดท้าย
int sensorValue = analogRead(A0);
sprintf(buffer, "Sensor reading: %d", sensorValue);
Serial.println(buffer);
ผลลัพธ์:
Sensor reading: 402
หรือโดยใช้การผูกสตริง:
String message = "Sensor reading: " + String(sensorValue);
Serial.println(message);
ลงลึก:
ภาษา C และ C++ (ภาษาหลักของสคริปต์ Arduino) โดยปกติไม่มีการใส่ค่าตัวแปรลงในสตริงเหมือนภาษาใหม่ๆ เช่น Python หรือ JavaScript แทนที่จะใช้ sprintf()
, ซึ่งเป็นวิธีที่พบบ่อยในการจัดรูปแบบสตริงด้วยตัวแปร มันทำงานได้ แต่อาจดูเกะกะและมีความเสี่ยงต่อการล้นของบัฟเฟอร์หากไม่จัดการอย่างระมัดระวัง
การผสานด้วยคลาส String
นั้นเข้าใจง่ายกว่าและปลอดภัยกว่าจากข้อผิดพลาดด้านหน่วยความจำ ข้อเสีย? มันอาจนำไปสู่การแตกตัวของหน่วยความจำ, เฉพาะอย่างยิ่งในโปรแกรมที่ทำงานยาวนานบนอุปกรณ์ที่มีหน่วยความจำจำกัดเช่น Arduinos
ตัวเลือกหนึ่งในบางไลบรารี C++ ใหม่หรือเฉพาะทาง(ไม่เป็นมาตรฐานใน Arduino)คือการใช้ไลบรารีจัดรูปแบบสตริงที่ให้ไวยากรณ์ที่ใกล้เคียงกับการใส่ค่าตัวแปร, เช่น fmtlib
สำหรับรายละเอียดการประมวลผล, เมื่อคุณทำการผสานด้วยคลาส String
, อะร์ดูโนจะสร้างวัตถุสตริงใหม่และจัดการหน่วยความจำให้คุณอยู่เบื้องหลัง sprintf()
, ในทางกลับกัน, จะเขียนข้อความที่จัดรูปแบบไว้ลงในบัฟเฟอร์ที่คุณจัดสรรไว้, ให้คุณมีการควบคุมมากขึ้นแต่มีค่าใช้จ่ายในการต้องจัดการหน่วยความจำด้วยตนเอง
ดูเพิ่มเติม
- คำอ้างอิงคลาส
String
ของ Arduino: https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/ - คำอ้างอิงฟังก์ชัน
sprintf()
: http://www.cplusplus.com/reference/cstdio/sprintf/ - การเพิ่มประสิทธิภาพหน่วยความจำของ Arduino: https://www.arduino.cc/en/Tutorial/Foundations/Memory
- fmtlib, ไลบรารีจัดรูปแบบสตริงสมัยใหม่: https://fmt.dev/latest/index.html