रूपांतरण प्रक्रिया
हेक्साडेसिमल → ऑक्टल रूपांतरण दो चरणों में किया जाता है:
- हेक्स → बाइनरी: प्रत्येक हेक्स अंक → 4 बिट बाइनरी
- बाइनरी → ऑक्टल: 3 बिट्स के समूह → 1 ऑक्टल अंक
उदाहरण: 1A6 हेक्स → ऑक्टल
चरण 1: हेक्स → बाइनरी 1 = 0001 A = 1010 6 = 0110 बाइनरी: 0001 1010 0110 चरण 2: बाइनरी → ऑक्टल (3-3 बिट्स समूह) 000 110 100 110 0 6 4 6 ऑक्टल: 646
संदर्भ तालिकाएं
| हेक्स | बाइनरी | ऑक्टल |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 10 |
| 9 | 1001 | 11 |
| A | 1010 | 12 |
| B | 1011 | 13 |
| C | 1100 | 14 |
| D | 1101 | 15 |
| E | 1110 | 16 |
| F | 1111 | 17 |
C प्रोग्राम
#include <stdio.h>
#include <string.h>
#include <math.h>
long long hex_to_binary(char hex[]) {
long long binary = 0;
long long place = 1;
for (int i = strlen(hex) - 1; i >= 0; i--) {
int val;
char c = hex[i];
if (c >= '0' && c <= '9') val = c - '0';
else if (c >= 'A' && c <= 'F') val = c - 'A' + 10;
else if (c >= 'a' && c <= 'f') val = c - 'a' + 10;
else {
printf("अमान्य हेक्स अंक: %c\n", c);
return -1;
}
// 4 बिट्स जोड़ें
binary += val * place;
place *= 10000; // 4 दशमलव स्थान = 1 हेक्स अंक
}
return binary;
}
long long binary_to_octal(long long binary) {
long long octal = 0;
long long place = 1;
while (binary > 0) {
int rem = binary % 1000; // 3 बिट्स लें
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;
binary /= 1000;
place *= 10;
}
return octal;
}
long long hex_to_octal(char hex[]) {
long long binary = hex_to_binary(hex);
if (binary == -1) return -1;
return binary_to_octal(binary);
}
int main() {
char hex[20];
printf("हेक्साडेसिमल संख्या दर्ज करें: ");
scanf("%19s", hex);
long long octal = hex_to_octal(hex);
if (octal != -1)
printf("ऑक्टल मान = %lld\n", octal);
return 0;
}
नमूना आउटपुट
हेक्साडेसिमल संख्या दर्ज करें: 1A6 ऑक्टल मान = 646 हेक्साडेसिमल संख्या दर्ज करें: 5CD ऑक्टल मान = 2715
सरल दृष्टिकोण (strtoul का उपयोग)
#include <stdio.h>
#include <stdlib.h>
int main() {
char hex[20];
printf("हेक्स दर्ज करें: ");
scanf("%s", hex);
unsigned long val = strtoul(hex, NULL, 16);
printf("ऑक्टल: %lo\n", val);
return 0;
}
महत्वपूर्ण नोट्स
- पहला दृष्टिकोण दिखाता है कि रूपांतरण आंतरिक रूप से कैसे काम करता है
- दूसरा दृष्टिकोण उत्पादन कोड के लिए व्यावहारिक है
- बड़ी संख्याओं के लिए, मनमाना-परिशुद्धता पुस्तकालयों का उपयोग करें
- हेक्स इनपुट केस-असंवेदनशील होना चाहिए