【发布时间】:2020-07-30 22:15:09
【问题描述】:
我有一个 IPV6 字符串作为下面的示例:
"0001:0002:0003:0004:0005:0006:0007:0008"
我正在尝试找到最简洁的方法将其转换为包含 1 - 8 的 8 个值的 uint16_t 数组。
我不能使用 inet_pton()
我可以创建自己的解析函数,但是我试图让 sscanf 如下工作,但没有成功。任何帮助,将不胜感激。 编辑:值将始终在字符串中以十六进制格式表示。
char *pString = "0001:0002:0003:0004:0005:0006:0007:0008";
uint16_t* uintValues = new uint16_t[8]{};
sscanf(pString,"%s%04x:", uintValues );
【问题讨论】:
-
您自己的解析函数将是最简单的解决方案。特别是因为
::ffff:192.168.0.1是一个有效的 IPV6 地址。试图从现有的 C 或 C++ 库函数中拼凑出一些东西,并实施适当的错误检查,这只是一个痛苦的世界,更多的问题发布到 stackoverflow.com。做你自己的解析。如果某件事必须做对,你必须自己做。 -
@SamVarshavchik 我忘了添加,所有的值都将表示为十六进制
-
没问题,现在试试你的 scanf 方法,为 Google 的名称服务器之一使用 IPv6 地址,例如“
2001:4860:4802:34::a”。 -
@SamVarshavchik:这仍然相当容易。数一下丢失的
:,你应该有7个。2001:4860:4802:34::a有5个。所以插入两个:0:0:0得到2001:4860:4802:34: 0:0:0 :a。解析这个。 -
@ArminMontigny 哦,真的吗?并且“新”存在于 C 代码中,对吗?