Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C แปลงฐานสิบหกเป็นฐานแปด (Hexadecimal to Octal)

ได้รับเลขฐานสิบหก (Hexadecimal) เป็นสตริง ภารกิจคือแปลงเป็นฐานแปด (Octal)

ขั้นตอน: 1) แปลง Hex → Binary 2) แปลง Binary → Octal

เลขฐานสิบหก (Hexadecimal)

ฐาน 16: 0-9 และ A=10, B=11, C=12, D=13, E=14, F=15

แปลงเป็น binary: แต่ละหลัก hex → binary 4 บิต แล้วรวมกัน

เลขฐานแปด (Octal)

ฐาน 8: 0-7 สร้างจากการจัดกลุ่ม binary 3 บิตต่อกลุ่ม

ตัวอย่างการแปลง 1A6

1A6 (hex) = 1, 10, 6 → binary: 0001 1010 0110

จัดกลุ่ม 3 บิต: 000 110 100 110 → octal: 0 6 4 6 = 646

ตัวอย่าง

Input: 1A6  Output: Octal Value = 646
Input: 1AA  Output: 652

แนวทาง

  • รับ input เป็นสตริง
  • Hex → Binary: switch-case ทุกกรณี 0-F เพิ่ม binary representation (4 บิต)
  • Binary → Octal: หาร binary ด้วย 1000 (3 บิต) switch-case หา digit octal สร้างเลข octal

โค้ดตัวอย่าง

#include <stdio.h>
#include <string.h>
#include <math.h>

long long int hexa_binary(char hex[]) {
    long long int binary = 0, place = 1;
    for (int i = 0; hex[i] != '\0'; i++) {
        binary = binary * 10000; // shift 4 bits
        switch (hex[i]) {
            case '0': binary += 0; break;
            case '1': binary += 1; break;
            case '2': binary += 10; break;
            case '3': binary += 11; break;
            case '4': binary += 100; break;
            case '5': binary += 101; break;
            case '6': binary += 110; break;
            case '7': binary += 111; break;
            case '8': binary += 1000; break;
            case '9': binary += 1001; break;
            case 'a': case 'A': binary += 1010; break;
            case 'b': case 'B': binary += 1011; break;
            case 'c': case 'C': binary += 1100; break;
            case 'd': case 'D': binary += 1101; break;
            case 'e': case 'E': binary += 1110; break;
            case 'f': case 'F': binary += 1111; break;
            default: printf("Invalid hexadecimal input."); return -1;
        }
    }
    return binary;
}

long long int binary_oct(long long binary) {
    long long int octal = 0, place = 1;
    while (binary > 0) {
        int rem = binary % 1000;
        int val;
        switch (rem) {
            case 0: val = 0; break;
            case 1: val = 1; break;
            case 10: val = 2; break;
            case 11: val = 3; break;
            case 100: val = 4; break;
            case 101: val = 5; break;
            case 110: val = 6; break;
            case 111: val = 7; break;
            default: val = 0;
        }
        octal = val * place + octal;
        binary /= 1000;
        place *= 10;
    }
    return octal;
}

long long int hexa_oct(char hex[]) {
    long long int binary = hexa_binary(hex);
    return binary_oct(binary);
}

int main() {
    char hex[20] = "5CD";
    printf("Octal Value = %lld", hexa_oct(hex));
    return 0;
}

ผลลัพธ์

Octal Value = 2715