संपादित करें: अब MSVC, सी ++ और गैर जीएनयू compilers (अंत देखें) के साथ संगत।
प्रश्न "सबसे प्रभावी तरीका" था। ओपी मंच निर्दिष्ट नहीं करता है, वह अपने कोड के लिए 256 बाइट फ्लैश स्टोरेज के साथ एक आरआईएससी आधारित एटीएमईएल चिप के लिए संकलित कर सकता है।
रिकॉर्ड के लिए, और उन (मेरे जैसे), जो "सबसे आसान तरीका है" और "सबसे कारगर तरीका" के बीच अंतर की सराहना करते हैं, और जो सीखने का आनंद के लिए ...
static const long hextable[] = {
[0 ... 255] = -1, // bit aligned access into this table is considerably
['0'] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // faster for most modern processors,
['A'] = 10, 11, 12, 13, 14, 15, // for the space conscious, reduce to
['a'] = 10, 11, 12, 13, 14, 15 // signed char.
};
/**
* @brief convert a hexidecimal string to a signed long
* will not produce or process negative numbers except
* to signal error.
*
* @param hex without decoration, case insensitive.
*
* @return -1 on error, or result (max (sizeof(long)*8)-1 bits)
*/
long hexdec(unsigned const char *hex) {
long ret = 0;
while (*hex && ret >= 0) {
ret = (ret << 4) | hextable[*hex++];
}
return ret;
}
यह जरूरी है कोई बाहरी पुस्तकालय नहीं है, और यह अंधेरे से तेज होना चाहिए।यह अपरकेस, लोअरकेस, अमान्य वर्ण, विषम आकार वाले हेक्स इनपुट (उदाहरण: 0xfff) को संभालता है, और अधिकतम आकार केवल कंपाइलर द्वारा ही सीमित होता है।
गैर-जीसीसी या सी ++ कंपाइलर्स या कंपाइलर्स के लिए जो फैंसी हेक्टेबल घोषणा को स्वीकार नहीं करेंगे।
इस के साथ पहले बयान बदलें (लंबे समय तक है, लेकिन अधिक अनुरूप) संस्करण:
static const long hextable[] = {
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1, 0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
};
यह शानदार है। मैंने पहले कभी इस विधि को नहीं देखा। –