Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C chuyển đổi thập lục phân sang bát phân

Cho số thập lục phân (hex) dưới dạng chuỗi, chuyển sang số bát phân (octal).

Quy trình: Hex → Binary → Octal.

Ví dụ

Input: 1A6 → Output: 646
Input: 1AA → Output: 652

Các bước:

  1. Chuyển từng ký tự hex thành 4 bit binary.
  2. Gom nhóm 3 bit binary thành 1 chữ số octal.

Mã nguồn C

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

long long hexa_binary(char hex[]) {
    long long binary = 0, place = 1;
    for (int i = 0; hex[i]; i++) {
        binary *= 10000;
        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("Hex không hợp lệ"); return -1;
        }
    }
    return binary;
}

long long binary_oct(long long binary) {
    long long octal = 0, place = 1;
    while (binary > 0) {
        int rem = binary % 1000, val = 0;
        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;
        }
        octal += val * place;
        binary /= 1000;
        place *= 10;
    }
    return octal;
}

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

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

Kết quả

Giá trị Octal = 2715