Lab C-2: Trace ค่าผ่าน char / int / hex / binary
เป้าหมาย
Section titled “เป้าหมาย”เขียนโปรแกรม C ที่:
- รับตัวอักษร 1 ตัว แล้วแสดงค่าเป็น char, int, hex, binary
- แสดง address ของตัวแปรด้วย pointer
- ทดสอบ sizeof vs strlen กับ string ต่าง ๆ
-
เปิด onlinegdb.com — เลือกภาษา C
-
เขียน character tracer — ประกาศ
char ch = 'X'แล้วแสดงค่าใน 4 รูปแบบ: char, decimal, hex, binary -
เพิ่ม pointer display — ใช้
&chแสดง address ของตัวแปร -
เพิ่ม string tracer — ประกาศ string แล้ว walk ผ่านทุก byte ด้วย pointer
-
รันและตรวจสอบ — ค่า hex ของ ‘A’ ต้องเป็น 0x41 และ binary ต้องเป็น 01000001
เขียนโปรแกรมที่แสดงผลแบบนี้:
=== Character Tracer ===char: Adecimal: 65hex: 0x41binary: 01000001address: 0x7ffc...
=== String Tracer: "DATA" ===[0] 'D' = 68 = 0x44 = 01000100[1] 'A' = 65 = 0x41 = 01000001[2] 'T' = 84 = 0x54 = 01010100[3] 'A' = 65 = 0x41 = 01000001[4] '\0' = 0 = 0x00 = 00000000
sizeof("DATA") = 5strlen("DATA") = 4
=== Pointer Demo ===value of x: 42address of x: 0x7ffc...value via *p: 42Show Solution
#include <stdio.h>#include <string.h>
// Function: แสดงเลขในรูป binary 8 หลักvoid print_binary(unsigned char byte) { for (int i = 7; i >= 0; i--) { printf("%d", (byte >> i) & 1); }}
int main() { // === Part 1: Character Tracer === char ch = 'A';
printf("=== Character Tracer ===\n"); printf("char: %c\n", ch); printf("decimal: %d\n", ch); printf("hex: 0x%02x\n", ch); printf("binary: "); print_binary((unsigned char)ch); printf("\n"); printf("address: %p\n", (void*)&ch);
// === Part 2: String Tracer === char word[] = "DATA";
printf("\n=== String Tracer: \"%s\" ===\n", word); for (int i = 0; i < (int)sizeof(word); i++) { if (word[i] == '\0') { printf("[%d] '\\0' = %d = 0x%02x = ", i, word[i], (unsigned char)word[i]); } else { printf("[%d] '%c' = %d = 0x%02x = ", i, word[i], word[i], (unsigned char)word[i]); } print_binary((unsigned char)word[i]); printf("\n"); }
printf("\nsizeof(\"DATA\") = %zu\n", sizeof(word)); printf("strlen(\"DATA\") = %zu\n", strlen(word));
// === Part 3: Pointer Demo === int x = 42; int *p = &x;
printf("\n=== Pointer Demo ===\n"); printf("value of x: %d\n", x); printf("address of x: %p\n", (void*)&x); printf("value via *p: %d\n", *p);
// เปลี่ยนค่าผ่าน pointer *p = 99; printf("\nAfter *p = 99:\n"); printf("x = %d (changed via pointer!)\n", x);
// === Bonus: Trace ตัวเลข 0-9 === printf("\n=== Bonus: Digits 0-9 ===\n"); for (char d = '0'; d <= '9'; d++) { printf("'%c' = %3d = 0x%02x = ", d, d, d); print_binary((unsigned char)d); printf("\n"); }
return 0;}ตรวจสอบตัวเอง
Section titled “ตรวจสอบตัวเอง”-
'A'แสดงเป็น decimal65, hex0x41, binary01000001 - string
"DATA"มี 5 bytes (4 ตัวอักษร +\0) -
sizeof("DATA")= 5 แต่strlen("DATA")= 4 - เปลี่ยนค่า
*p = 99แล้วxเปลี่ยนตาม -
print_binaryแสดง 8 หลักถูกต้อง