การแปลงชนิดข้อมูลระหว่าง char และ int ในภาษา C: คู่มือสำหรับมือใหม่

1. ความสำคัญของชนิดข้อมูลในภาษา C

ในภาษา C ชนิดข้อมูล (Data Type) มีผลอย่างมากต่อความถูกต้องและประสิทธิภาพของโปรแกรม ชนิด char และ int ถือเป็นชนิดข้อมูลพื้นฐานที่ถูกใช้งานบ่อยในโปรแกรม และมักจำเป็นต้องแปลงค่าระหว่างกันอยู่เสมอ ในบทความนี้จะอธิบายวิธีแปลง char และ int พร้อมข้อควรระวังที่ควรรู้

ตัวอย่างการใช้งานทั่วไปของการแปลง

ในการเขียนโปรแกรม การแปลงระหว่าง char กับ int มีประโยชน์เมื่อคุณต้องการจัดการตัวอักษรกับค่าตัวเลขที่สอดคล้องกัน หรือกรณีต้องการประหยัดหน่วยความจำ เช่น การแปลงรหัส ASCII ที่เก็บใน char เป็น int เพื่อใช้คำนวณ หรือเมื่อรับค่าจาก char แล้วต้องการประมวลผลเป็นตัวเลข การแปลงนี้จึงจำเป็น

2. การแปลงจาก char เป็น int

ในภาษา C การแปลงจาก char เป็น int สามารถทำได้ด้วยการ cast ซึ่งจะทำให้ค่าจาก char ถูกจัดการเป็นจำนวนเต็มได้

วิธีแปลงพื้นฐาน

เมื่อต้องการแปลงค่า char เป็น int เพียงใช้ cast แบบง่ายๆ ก็เพียงพอ

#include <stdio.h>

int main() {
    char character = 'A';  // ASCII ของ 'A' คือ 65
    int intValue = (int)character;  // cast char เป็น int
    printf("ตัวอักษร %c มีรหัส ASCII เท่ากับ %d\n", character, intValue);
    return 0;
}

โปรแกรมนี้จะทำการแปลงตัวอักษร 'A' เป็นเลขจำนวนเต็ม และแสดงผลลัพธ์ที่ได้คือ 65

char แบบมีเครื่องหมายและไม่มีเครื่องหมาย

ในภาษา C มีทั้ง char แบบมีเครื่องหมาย (signed char) ที่รับค่าได้ทั้งบวกและลบ และแบบไม่มีเครื่องหมาย (unsigned char) ที่รับค่าได้ตั้งแต่ 0 ถึง 255 ขณะทำการแปลงจาก char เป็น int ควรระวังความแตกต่างนี้ ตัวอย่างดังนี้

#include <stdio.h>

int main() {
    unsigned char uChar = 200;  // char แบบไม่มีเครื่องหมาย
    int intValue = (int)uChar;
    printf("ค่า unsigned char %u เมื่อแปลงเป็น int คือ %d\n", uChar, intValue);
    return 0;
}

ตัวอย่างนี้จะเปลี่ยนค่า char แบบไม่มีเครื่องหมาย 200 ไปเป็น int แล้วแสดงผลเป็น 200 สำหรับแบบมีเครื่องหมาย ผลลัพธ์อาจต่างออกไปตามการจัดการเครื่องหมาย จึงควรตรวจสอบกรณีให้เหมาะสม

年収訴求

3. การแปลงจาก int เป็น char

การแปลงจาก int เป็น char คือการ cast ค่าจำนวนเต็มให้เป็นตัวอักษรขนาด 1 byte แต่หากค่าของ int เกินขอบเขตของ char อาจเกิดการสูญเสียข้อมูลได้

วิธีแปลงและข้อควรระวัง

ถ้าแปลงค่าที่อยู่นอกช่วง char ผลลัพธ์อาจผิดคาด ดังตัวอย่าง

#include <stdio.h>

int main() {
    int number = 300;  // ค่านี้อยู่นอกช่วง char
    char character = (char)number;  // อาจเกิดข้อมูลสูญหาย
    printf("จำนวนเต็ม %d เมื่อแปลงเป็น char ได้ตัวอักษร '%c'\n", number, character);
    return 0;
}

ตัวอย่างนี้จะแปลง 300 เป็น char ซึ่งจะได้ค่าผิดจากที่คาด เพราะ char รับได้จำกัด ดังนั้นควรระวังช่วงค่าของ char เสมอ

4. การแปลงจากสตริงเป็นตัวเลข

ในภาษา C การแปลงค่าจาก string (สตริง) เป็นตัวเลขใช้งานบ่อย เช่น รับค่าจากผู้ใช้แล้วแปลงเป็น int นิยมใช้ฟังก์ชัน atoi หรือ strtol ในการแปลง

การแปลงด้วยฟังก์ชัน atoi

atoi แปลงสตริงเป็นจำนวนเต็มได้ง่าย แต่ไม่รองรับการตรวจสอบข้อผิดพลาด

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "1234";
    int number = atoi(str);  // แปลง string เป็น int
    printf("สตริง %s เมื่อแปลงเป็นจำนวนเต็มได้ %d\n", str, number);
    return 0;
}

ตัวอย่างนี้จะแปลง "1234" เป็น 1234 แล้วแสดงผล แต่ถ้ามีข้อผิดพลาดจะตรวจสอบไม่ได้

การแปลงแบบปลอดภัยด้วย strtol

strtol สามารถตรวจสอบข้อผิดพลาดขณะทำการแปลง string เป็นจำนวนเต็มได้ ทำให้ปลอดภัยกว่า

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "1234";
    char *endptr;
    long int number = strtol(str, &endptr, 10);  // แปลง string เป็น int แบบปลอดภัย
    if (*endptr != ' ') {
        printf("การแปลงล้มเหลว\n");
    } else {
        printf("สตริง %s เมื่อแปลงเป็นจำนวนเต็มได้ %ld\n", str, number);
    }
    return 0;
}

โค้ดนี้จะเช็คกรณีแปลงผิดพลาดและแสดงข้อความแจ้งเตือน ทำให้จัดการกับข้อผิดพลาดได้ดีขึ้น

5. ตัวอย่างประยุกต์การใช้ char กับ int

สุดท้าย มาดูตัวอย่างการนำ char และ int ไปประยุกต์ใช้งานจริงร่วมกัน

การคำนวณผสมระหว่าง char และ int

โค้ดตัวอย่างนี้นำ char กับ int มารวมกันเพื่อสร้างอักขระใหม่

#include <stdio.h>

int main() {
    char ch = 'a';
    int num = 3;
    char result = ch + num;  // บวกค่าของ 'a' (ASCII) กับ 3
    printf("ตัวอักษร %c บวกกับ %d ได้ตัวอักษร '%c'\n", ch, num, result);
    return 0;
}

โค้ดนี้จะบวก ASCII ของ 'a' กับ 3 ได้ 'd' แสดงให้เห็นว่าการประมวลผลร่วมกันระหว่าง char และ int ทำได้ง่าย

侍エンジニア塾