วันพฤหัสบดีที่ 30 พฤศจิกายน พ.ศ. 2560

Arduino ตอนที่ 8 การแปลงชนิดข้อมูล

ไม่มีความคิดเห็น

Arduino ตอนที่ 8 การแปลงชนิดข้อมูล


การแปลงชนิดข้อมูลนั้นสำคัญมาก โดยเฉพาะหากเราทำงานที่ต้องรับข้อมูลมาจากภายนอก หรือรับข้อมูลมาจากไลบารีอื่นๆ ซึ่งในแต่ละไลบารีก็จะมีการส่งชนิดค่ากลับจากฟังก์ชั่นแตกต่างกัน ตามแต่ผู้จัดทำไลบารีถนัด

การแปลง String เป็น Int

โดยปกติแล้วหากมีการส่งค่าเป็นข้อความยาวๆมา แต่ว่าต้องการตัวเลขที่อยู่ในบางส่วนของข้อความเท่านั้น ซึ่งหลังจากที่ตัดส่วนของตัวเลขแล้ว ชนิดของข้อมูลก็ยังเป็น String อยู่ดี หากต้องการแปลงเป็น Int เพื่อใช้ในการคำนวน หรือง่ายต่อการจัดเก็บ ต้องใช้คำสั่ง string.toInt();
ตัวอย่าง
String num10 = "10";
int n10 = num10.toInt();
จากตัวอย่าง บรรทัดแรกได้มีการประกาศตัวแปร num10 ชนิด String ใส่ค่าเป็น "10" ต่อมาในบรรทัดที่ 2 ได้แปลงจากข้อมูลชนิด String เป็น Int ด้วยคำสั่ง string.toInt(); แล้วนำค่าไปเก็บในตัวแปร n10 ซึ่งเป็นตัวแปรชนิด Int ทำให้สามารถนำตัวแปรนี้ไปใช้งานได้แล้ว

การแปลง Int เป็น String

การแปลง Int เป็น String จะใช้ในกรณีที่ต้องการนำตัวเลขไปเชื่อมกับข้อความ ซึ่งโดยปกติแล้วการนำข้อมูล 2 ตัวมาเชื่อมกัน ต้องทำให้ข้อมูลนั้นเป็นชนิดเดียวกันเสียก่อน โดยใช้คำสั่ง String(val);
ตัวอย่าง
int num = 10;
String text = "This number is " + String(num);
จากตัวอย่าง ได้มีการประกาศตัวแปร num เป็นชนิด int ใส่ค่าเป็น 10 ในบรรทัดที่ 2 ได้มีการประกาศตัวแปร text ให้มีข้อความ "This number is " แล้วใช้คำสั่ง String(val); เพื่อแปลงตัวแปร int ให้เป็น String แล้วจึงเชื่อมข้อความด้วยเครื่องหมาย + ดังนั้นตัวแปร text จึงได้ค่าเป็น "This number is 10"

การแปลง String เป็น char array

ใช้ในกรณีที่ไลบารีรับตัวแปรเฉพาะตัวแปร char array เข้าไปในฟังก์ชั่น ซึ่งส่วนใหญ่จะใช้งานในระบบ IoT เพื่อใช้รับส่งข้อมูลเพื่อสื่อสารและประมวลผลกัน ซึ่งคำสั่งที่จะใช้ในการแปลงคือคำสั่ง string.toCharArray(buflen);
ตัวอย่าง
String text = "IOXhop";
char tChar[50];
text.toCharArray(tChar, 50);
ในบรรทัดที่ 1 ได้มีการประกาศตัวแปร text ชนิด String เพื่อเก็บข้อความ "IOXhop" ในบรรทัดต่อมา ได้ประกาศตัวแปร tChar เป็นชนิด char แบบอาเรย์ แล้วใช้คำสั่ง string.toCharArray(buf, len); ซึ่ง buf คือชื่อตัวแปร char array ที่กำหนดขนาดไว้แล้ว ส่วน len คือขนาดของตัวอักษรที่ต้องการนำมาใส่ทั้งหมด ซึ่ง len จะสัมพันธ์กับการตั้งขนาดอาเรย์ตรงที่ หากตั้งให้ขนาดอาเรย์น้อยกว่า len อาจจะทำให้โปรแกรมทำงานผิดพลาด โดยกินพื้นที่แรมส่วนที่ไม่ได้จองไว้ อาจทำให้พื้นที่แรมนั้นทับซ้อนกันกับพื้นที่ถูกใช้งานอยู่ ซึ่งเป็นจุดที่ต้องระวังเมื่อแปลง String เป็น char array

การแปลง char array เป็น String

เนื่องจากตัวแปร char เก็บค่าเป็นตัวอักษร แต่ String เก็บเป็นข้อความ การนำ char มาแปลงเป็น String จึงต้องใช้วิธีการวนลูปเอาออกมาทีละตัวอักษรในตัวแปร char แล้วนำไปเก็บทีละตัวอักษรไปเรื่อยๆในตัวแปร String
ตัวอย่าง
char text[] = "IOXhop";
String sText;
for (int i=0;i<sizeof(text);i++)
  sText += text[i];
ในบรรทัดที่ 1 ประกาศตัวแปร char array ไว้ เก็บค่า "IOXhop" ต่อมาในบรรทัดที่ 2 ได้สร้างตัวแปรชนิด String ชื่อ sText ไว้ เพื่อใช้เก็บข้อความที่ถูกแปลงแล้ว ในบรรทัดที่ 3 ได้มีการใช้ for loop ในการวนรอบทำงาน บรรทัดที่ 4 เพิ่มตัวอักษรไปเรื่อยๆ เมื่อจบการทำงานแล้ว ตัวแปร sText จะมีค่าเป็น "IOXhop"

การแปลง float เป็น Int

การแปลง float เป็น Int ทำเพื่อตัดเศษทิ้ง ทำให้จำนวนที่ได้เป็นจำนวนเต็มเท่านั้น ดังนั้นการแปลงเป็น Int จึงมีประโยชน์ในแง่การตัดเศษตัวเลข การแปลงจะใช้วิธีการบังคับแปลงข้อมูลโดยตรง โดยมีรูปแบบเป็น (TYPE)(VAL)
ตัวอย่าง
(int)(100.23); // ผลลัพธ์คือ 100
(int)(45); // ผลลัพธ์คือ 45
(int)(3.142); // ผลลัพธ์คือ 3
(int)(a); // ผลลัพธ์คือ a ตัดเศษ

การแปลง String เป็น float

จุดประสงค์เดียวกับหัวข้อ การแปลง String เป็น Int เพียงแต่กรณี String เป็นตัวเลขทศนิยม ซึ่งจะต้องใช้ตัวแปร flost เก็บเท่านั้น ใช้คำสั่ง string.toFloat() ในการแปลง
ตัวอย่าง
String num10_32 = "10.32";
float n10_32 = num10_32.toFloat();

การแปลง float เป็น String

ใช้คำสั่ง String(val); เช่นเดียวกับหัวข้อ การแปลง Int เป็น String

ไม่มีความคิดเห็น :

แสดงความคิดเห็น