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:
- Chuyển từng ký tự hex thành 4 bit binary.
- 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