在C中将十六进制char转换为int的最短方法?

时间:2016-03-30 03:28:06

标签: c char hex

我在C中寻找最少量的代码,以便将char转换为int,如果char不是有效的十六进制数字,则标记-1(或任何错误标志)。

这是我想出的,有更短的方式吗?

// input example
char input = 'f';   

// conversion segment
int x = input - '0';    
if (!((x >= 49 && x <= 54) || (x >= 0 &&  x <= 9))) x = -1;
if (x > 9) x -= 39;

// test print   
printf("%d", x);

2 个答案:

答案 0 :(得分:1)

此代码假设ASCII并将所有256个字符代码转换为256个不同的代码,部分'0'-'9' 'A'-'F'映射到0,1,...15

有关其他技巧和简化,请参阅post

unsigned char ch = GetData(); // Fetch 1 byte of incoming data;
if (!(--ch & 64)) {           // decrement, then if in the '0' to '9' area ...
  ch = (ch + 7) & (~64);      // move 0-9 next to A-Z codes
}
ch -= 54;                     // -= 'A' - 10 - 1
if (ch > 15) { 
  ; // handle error
}

答案 1 :(得分:0)

尝试此功能:

isxdigit(c);