在不使用库函数的情况下将ASCII数转换为C中的十六进制数

时间:2011-06-03 21:10:43

标签: c ascii hex

我想将32位ASCII数字(例如“FE257469”)转换为等效的32位十六进制数,该数字将存储在32位变量中。最重要的是,我想做没有使用任何库函数,如sscanf(),atoi()等。

有关于此的任何想法吗?

提前感谢。

2 个答案:

答案 0 :(得分:1)

通常的方式是:

将结果初始化为0

  1. 将一位输入转换为十进制以获取当前数字
  2. 将结果乘以16
  3. 将当前数字添加到结果
  4. 重复步骤1-3以获取剩余数字

答案 1 :(得分:1)

以下是基于交换机的这种功能的实现:

unsigned int parseHex( char *str )
{
    unsigned int value = 0;

    for(;; ++str ) switch( *str )
    {
        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
            value = value << 4 | *str & 0xf;
            break;
        case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
        case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
            value = value << 4 | 9 + *str & 0xf;
            break;
        default:
            return value;
    }
}