gpt4 book ai didi

在C中将表示前缀掩码的ipv6地址转换为整数格式

转载 作者:行者123 更新时间:2023-12-02 08:48:15 25 4
gpt4 key购买 nike

将表示前缀掩码的 IPv6 地址转换为整数的 C 代码是什么。

例如,这个 IPv6 地址前缀掩码:FFFF:FFFF:FFFF:FFFF:0000:0000:0000:0000

将转换为64

谢谢

需要将其从 sockaddr_in6 更改为 int

最佳答案

我的方法与 Zan 的方法有关,但处理了一个事实,即包含在 struct sockaddr_in6 中的 struct in6_addr 本质上是一个 16 个字符的数组。

因此您应该遍历字节直到找到值 != 0xFF

int bits = 0;
struct in6_addr * addr = &((struct sockaddr_in6 *)ai_addr)->sin6_addr;
for (i=0; i<16; i++) {
if (addr->s6_addr[i] == '\xFF') {
bits += 8;
} else {
case (addr->s6_addr[i]) {
'\xFE': bits += 7; break;
'\xFC': bits += 6; break;
'\xF8': bits += 5; break;
'\xF0': bits += 4; break;
'\xE0': bits += 3; break;
'\xC0': bits += 2; break;
'\x80': bits += 1; break;
'\x00': bits += 0; break;
default: complain();
}
break;
}
}

但是,正如 Zan 所写,最好保留您已有的号码,并在需要时生成掩码,而不是相反。

但是,@SamuelChampagne,真的:你真的应该接受可行的答案!总有一天,人们会拒绝帮助你。

关于在C中将表示前缀掩码的ipv6地址转换为整数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com