c:IPv4地址的增量字节,以网络字节顺序排列

问题描述 投票:0回答:1

在以下代码中,addr_minaddr_max是代表IPv4地址的32位无符号值,并且它们按网络字节顺序(即big-endian格式:]]

uint32_t addr;
for (addr = addr_min; addr <= addr_max; addr = addr + htonl(1)) {
   ...
}

因此,假设我要遍历地址1.2.0.0并逐渐增加第三个和第四个八位位组,从而总共产生65534个地址(打印时显示addr_max表示feff0201)。我期望上面的代码可以工作,相反,它只会将第四个八位字节更改为值0xfe,并且从不接触第三个八位字节。

我可能做错了什么?

在以下代码中,addr_min和addr_max是代表IPv4地址的32位无符号值,并且它们以网络字节顺序(即,大端顺序格式):uint32_t addr;对于(addr = addr_min; addr&...

c linux endianness
1个回答
2
投票

您无意对已经以网络字节顺序编码的值进行任何算术运算。在这种情况下,您可能只会添加到最高位字节。

快速的答案是:

© www.soinside.com 2019 - 2024. All rights reserved.