समस्या
C प्रोग्रामिंग भाषा का उपयोग करके हेक्साडेसिमल मान को पूर्णांक मान में कैसे बदलें?
समाधान
हेक्साडेसिमल मान 16 प्रतीकों में दर्शाए जाते हैं: 0-9 और A-F। यहां A-F का दशमलव समतुल्य 10-15 है।
रूपांतरण तर्क
हेक्स: A12
स्थिति: 2 1 0 (दाएं से बाएं, 0-आधारित)
मान: 10 1 2 (A=10, 1=1, 2=2)
दशमलव = 10×16² + 1×16¹ + 2×16⁰
= 10×256 + 1×16 + 2×1
= 2560 + 16 + 2
= 2578
प्रोग्राम: कस्टम फ़ंक्शन का उपयोग करके
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
int hexToDecimal(char *hex) {
int decimal = 0;
int len = strlen(hex);
for (int i = 0; i < len; i++) {
char ch = toupper(hex[i]); // बड़े अक्षर में बदलें
int digit;
if (ch >= '0' && ch <= '9') {
digit = ch - '0';
} else if (ch >= 'A' && ch <= 'F') {
digit = ch - 'A' + 10;
} else {
printf("अमान्य हेक्स कैरेक्टर: %c\n", ch);
return -1;
}
// स्थिति मूल्य: 16^(len-1-i)
decimal += digit * pow(16, len - 1 - i);
}
return decimal;
}
int main() {
char hex[100];
printf("हेक्साडेसिमल मान दर्ज करें: ");
scanf("%s", hex);
int decimal = hexToDecimal(hex);
if (decimal != -1) {
printf("दशमलव: %d\n", decimal);
}
return 0;
}
आउटपुट
हेक्साडेसिमल मान दर्ज करें: A
दशमलव: 10
हेक्साडेसिमल मान दर्ज करें: A12
दशमलव: 2578
हेक्साडेसिमल मान दर्ज करें: FF
दशमलव: 255
हेक्साडेसिमल मान दर्ज करें: 10
दशमलव: 16
सरल विधि: scanf के साथ %x फॉर्मेट
#include <stdio.h>
int main() {
unsigned int num;
printf("हेक्साडेसिमल दर्ज करें (0x के बिना): ");
scanf("%x", &num); // %x हेक्स पढ़ता है
printf("दशमलव: %d\n", num);
printf("हेक्स: 0x%X\n", num);
printf("ऑक्टल: %o\n", num);
printf("बाइनरी: "); // बाइनरी के लिए कस्टम फ़ंक्शन चाहिए
return 0;
}
आउटपुट
हेक्साडेसिमल दर्ज करें (0x के बिना): FF
दशमलव: 255
हेक्स: 0xFF
ऑक्टल: 377
printf में हेक्स प्रिंट करना
| फॉर्मेट | आउटपुट | उदाहरण (255 के लिए) |
|---|---|---|
%x | लोअरकेस हेक्स | ff |
%X | अपरकेस हेक्स | FF |
%#x | 0x प्रीफिक्स के साथ लोअरकेस | 0xff |
%#X | 0X प्रीफिक्स के साथ अपरकेस | 0XFF |
हेक्स स्ट्रिंग को पूर्णांक में (strtol)
#include <stdio.h>
#include <stdlib.h>
int main() {
char *hexStr = "1A3F";
char *endptr;
long value = strtol(hexStr, &endptr, 16); // आधार 16
if (*endptr == '\0') {
printf("दशमलव: %ld\n", value); // 6719
} else {
printf("अमान्य हेक्स स्ट्रिंग\n");
}
return 0;
}
पूर्णांक को हेक्स स्ट्रिंग में (sprintf)
#include <stdio.h>
int main() {
int num = 6719;
char hexStr[20];
sprintf(hexStr, "%X", num); // अपरकेस
printf("हेक्स: %s\n", hexStr); // 1A3F
sprintf(hexStr, "0x%04X", num); // पैडेड विथ 0x
printf("फॉर्मेटेड: %s\n", hexStr); // 0x1A3F
return 0;
}
सारांश
- मैन्युअल रूपांतरण: प्रत्येक अंक को 16^स्थिति से गुणा करें
- आसान इनपुट:
scanf("%x", &num) - आसान आउटपुट:
printf("%X", num) - मजबूत पार्सिंग:
strtol(str, NULL, 16) - स्ट्रिंग रूपांतरण:
sprintf(buf, "%X", num)