Skip to content

Lab C-2: Trace ค่าผ่าน char / int / hex / binary

เขียนโปรแกรม C ที่:

  1. รับตัวอักษร 1 ตัว แล้วแสดงค่าเป็น char, int, hex, binary
  2. แสดง address ของตัวแปรด้วย pointer
  3. ทดสอบ sizeof vs strlen กับ string ต่าง ๆ
  1. เปิด onlinegdb.com — เลือกภาษา C

  2. เขียน character tracer — ประกาศ char ch = 'X' แล้วแสดงค่าใน 4 รูปแบบ: char, decimal, hex, binary

  3. เพิ่ม pointer display — ใช้ &ch แสดง address ของตัวแปร

  4. เพิ่ม string tracer — ประกาศ string แล้ว walk ผ่านทุก byte ด้วย pointer

  5. รันและตรวจสอบ — ค่า hex ของ ‘A’ ต้องเป็น 0x41 และ binary ต้องเป็น 01000001

เขียนโปรแกรมที่แสดงผลแบบนี้:

=== Character Tracer ===
char: A
decimal: 65
hex: 0x41
binary: 01000001
address: 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") = 5
strlen("DATA") = 4
=== Pointer Demo ===
value of x: 42
address of x: 0x7ffc...
value via *p: 42
Show 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;
}
  • 'A' แสดงเป็น decimal 65, hex 0x41, binary 01000001
  • string "DATA" มี 5 bytes (4 ตัวอักษร + \0)
  • sizeof("DATA") = 5 แต่ strlen("DATA") = 4
  • เปลี่ยนค่า *p = 99 แล้ว x เปลี่ยนตาม
  • print_binary แสดง 8 หลักถูกต้อง