检查argv [1]是否为十六进制字符串

时间:2014-05-16 20:40:41

标签: c ip

我有一个简单的程序,它将IP地址作为唯一的参数。 IP地址可以采用两种格式:十进制或十六进制。根据使用的不同,我需要执行不同的操作。

因此我需要检查参数是否为

1) IP in dotted decimal format
2) IP in hex format 
3) other (illegal/malformed argument)

我该如何最好地检查? 我应该使用某种正则表达式吗?正确形成的十六进制地址必须包含8个十六进制字符[0-9a-f]{8}。正确的十进制点IP必须包含4个数字[0-255]和3个点。

2 个答案:

答案 0 :(得分:1)

您可以使用isxdigit(character)中的<ctype.h>character检查(\d{1,3}\.){3}\d{1,3}是否为十六进制数字。


<强> 更新: 如果我的推定是正确的,那么&#34;点缀&#34;地址就像:[a-zA-Z0-9]{8},十六进制地址是:#include <string.h> #include <stdbool.h> bool isxip(const char *address) { for (int i=0; i<strlen(address); i++) if (address[i] == '.') return false; return true; } ,那么你正在寻找这样的东西:

{{1}}

答案 1 :(得分:-1)

当它包含点时,它很可能不是十六进制字符串。