我有一个简单的程序,它将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个点。
答案 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)
当它包含点时,它很可能不是十六进制字符串。