如何检查char*在C中是否只有十六进制字符?
我有一个如何检查char*在C中是否只有十六进制字符?,c,C,我有一个char*argv[],我只想检查它是否包含有效的十六进制值。例如,我试图编写一个函数,如boolishex(argv[1]),并说明它是否只有十六进制。如何确保它只有数字0-9和字母a-f?我已经找到了所有alpha或数字的方法,但我不确定是否有更简单的方法来处理hex。谢谢。把它们读作数字:它的值应该是 介于48(字符0)和57(字符9)之间 介于65(字符A)和70(字符F)之间 介于97(字符a)和102(字符f)之间 (值取自ASCII表,如:)。尝试isxdigit(),
char*argv[]
,我只想检查它是否包含有效的十六进制值。例如,我试图编写一个函数,如boolishex(argv[1])
,并说明它是否只有十六进制。如何确保它只有数字0-9和字母a-f?我已经找到了所有alpha或数字的方法,但我不确定是否有更简单的方法来处理hex。谢谢。把它们读作数字:它的值应该是
- 介于48(字符0)和57(字符9)之间
- 介于65(字符A)和70(字符F)之间
- 介于97(字符a)和102(字符f)之间
(值取自ASCII表,如:)。尝试
isxdigit()
,在
中定义,它将匹配数字0到9以及大小写字母A到F。在BSD和macOS上,您也可以使用ishexnumber()
您可以通过标准函数检查字符串内容与任何字符集。它计算仅由指定字符组成的指定字符串的初始段的长度:
unsigned hex_count = strspn(arg, "0123456789abcdef");
_Bool is_all_hex = !arg[hex_count]; // is arg[hex_count] a string terminator?
对于性能合理的解决方案,您可以使用静态查找表:
#include <limits.h>
int isHex(char c)
{
static int s_hex_digit[1 << CHAR_BIT] = {
['0'] = 1, ['1'] = 1, ['2'] = 1, ['3'] = 1, ['4'] = 1,
['5'] = 1, ['6'] = 1, ['7'] = 1, ['8'] = 1, ['9'] = 1,
['A'] = 1, ['B'] = 1, ['C'] = 1, ['D'] = 1, ['E'] = 1, ['F'] = 1,
['a'] = 1, ['b'] = 1, ['c'] = 1, ['d'] = 1, ['e'] = 1, ['f'] = 1
};
return s_hex_digit[(unsigned char)c];
}
#包括
int isHex(字符c)
{
静态int s_hex_digit[1“我已经找到了所有alpha或数字的方法,但我不确定是否有更简单的方法来使用hex”。在发布问题时,请确保包含您对该问题的理解。虽然我已经回答了,但如果我有更多的上下文,我的答案可能更适合您。“…和字母a-f”。那么'A'
到'F'
呢?你的意思是说isxdigit()
。ishxnumber
不是一个标准函数。ishxnumber()
是非标准函数。这似乎是一个BSD ism,在glibc没有学会它的人中有些不同寻常。