#include <cctype> // is*
int to_int(int c) {
if (not isxdigit(c)) return -1; // error: non-hexadecimal digit found
if (isdigit(c)) return c - '0';
if (isupper(c)) c = tolower(c);
return c - 'a' + 10;
}
template<class InputIterator, class OutputIterator> int
unhexlify(InputIterator first, InputIterator last, OutputIterator ascii) {
while (first != last) {
int top = to_int(*first++);
int bot = to_int(*first++);
if (top == -1 or bot == -1)
return -1; // error
*ascii++ = (top << 4) + bot;
}
return 0;
}
#include <stdio.h>
int main()
{
int i;
char str[80]={0};
char input[80]="0x01F1";
int output;
/* convert a hex input to integer in string */
printf ("Hex number: ");
scanf ("%x",&i);
sprintf (str,"%d",i,i);
printf("%s\n",str);
/* convert input in hex to integer in string */
sscanf(input,"%x",&output);
printf("%d\n",output);
}
3条答案
按热度按时间xriantvc1#
基于Python的
binascii_unhexlify()
函数:Example
输出
源代码中的注解中有一句有趣的话:
当我在阅读几十个对这里的格式进行编码或解码的程序时(文档?hihi:-)我已经制定了 Json 的观察:
以ASCII编码二进制数据的程序是以这样一种风格编写的,即它们尽可能不可读。使用的设备包括不必要的全局变量,将重要的表隐藏在不相关的源文件中,将函数放在包含文件中,使用看似描述性的变量名用于不同的目的,调用空的子例程和其他许多方法。
我试图打破这一传统,但我想这确实使性能次优。哦,太糟了...
Jack Jansen,CWI,1995年7月。
hzbexzde2#
如果你想用一种更C++原生的方式,你可以说
cu6pst1q3#
sprintf
和sscanf
函数已经可以为您完成此操作。这段代码是一个例子,应该给予你一个想法。请在使用函数引用和安全的替代方法之前仔细检查它们