![]() |
1
50
你可能想要 inet_pton ,对于无效的af参数返回-1,对于无效的地址返回0,对于有效的IP地址返回+1。它同时支持IPv4和未来的IPv6地址。如果仍然需要编写自己的IP地址处理,请记住,标准的32位十六进制数是有效的IP地址。并非所有的IPv4地址都采用点分十进制表示法。 这个函数既验证地址,也允许您在相关的套接字调用中使用相同的地址。 |
![]() |
2
44
Boost.Asio 提供类 ip::address . 如果只想验证字符串,可以这样使用:
这也适用于十六进制和八进制四进制。这也是一个更加便携的解决方案。 |
![]() |
3
33
我解决的办法是:
这适用于其他答案中提到的大多数情况。它不能识别八进制或十六进制格式的IP地址,但这对于我的应用程序是可以接受的。 |
![]() |
4
17
这看起来似乎很简单,但也有一些缺陷。例如,在前面的答案中发布的许多解决方案都假定四元数是以10为基数的,但四元数从零开始。
必须
被视为以8(八进制)为基数的数字,因此,例如以零开始并包含数字8或9的任何四部分都无效。即IP号码
我强烈建议您使用操作系统或编译器环境中包含的套接字库提供的函数。
编辑:(认为它是隐式的,但是)当然,你也可以有十六进制四次方,一个LA
根据Kalusingh Gabbar的请求进一步编辑:例如,可以指定
|
![]() |
5
8
这里有一个简单的方法。
|
![]() |
6
5
如果你在窗户上,你可以利用
|
![]() |
7
2
Boost.Regex 是合适的。
|
![]() |
8
2
如果你想自己写而不是用图书馆,那么 atoi()将字符转换为整数,可以测试每个数字的范围,以及“.”之间的某些strcmp。还可以进行一些快速检查,例如字符串的长度(应小于16个字符(不包括空终止符)、点的数量。等。 但是,使用现有代码可能要容易得多。 |
![]() |
9
2
下面是验证给定IPv4地址的C程序。我假设IP地址是十进制格式。请把你的想法告诉我。
|
![]() |
10
2
我也只使用了C stdlib函数,尽管它不支持上面提到的八进制四进制,但这不应该是一个问题,我可以很容易地添加该部分并将其提供给您。作为一个初学者(学生),直到现在我才知道在你的IP中有可能得到一个八进制数。我以为一定是小数。 |
![]() |
11
1
使用Boost标记器和Boost字符分隔符可以很容易地完成这一任务。 http://www.boost.org/doc/libs/1_37_0/libs/tokenizer/char_separator.htm |
![]() |
12
1
如果您不想增加或TR1的开销,您可以搜索点,检查它们之间的字符是否是0到255之间的数字。 |
![]() |
13
1
|
![]() |
14
1
一些小的修复程序可以修复某些情况,如127..0.1、127.0.0..如果有以下情况,请删除空格:
|
![]() |
15
1
您可以这样编写自己的函数:
|
![]() |
16
0
如果您希望接收常规格式的IP地址(
原因是,如果您传递IP,如8.88.8或12345 (十进制形式) ,比约恩的回答不会出错。 (至少在增压1.68的情况下) 我的代码将任何形式转换为Boost中的内部结构,然后将其转换回点分十进制格式,然后将其与收到的第一个IP进行比较,以查看它们是否相等,如果不相等,我们确定输入不是我们想要的方式。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |