<分区>
我有一个 IP 地址存储在两个 64 位数组中。我注意到最低有效位在第一个字节小端。
我正在减去两个只能相差 64 位的 IPv6 地址。所以基本上,我只需要减去 addr_end[1]-addr_begin[0]
得到结果。
但是结果不正确。
这是我正在尝试的代码:
struct m128bit {
union {
uint8_t val8[16];
uint16_t val16[8];
uint32_t val32[4];
uint64_t val64[2];
} u;
};
//Overflows 64 bit, too big range (little endian representation)
if (local_begin.u.val64[0] != local_end.u.val64[0]) {
cout<<"Range is too big!"<<endl;
return 0;
}
else {
return (local_end.u.val64[1])-(local_begin.u.val64[1]);
}
结果是 0xb
强>。
我正在传递以下 IP:
2001:0db8:85a3:0000:0000:8a2e:0370:7335
- 2001:0db8:85a3:0000:0000:8a2e:0370:7340
结果应该是5。
我错过了什么?我尝试申请 htobe64()
同时减去地址,但这也不起作用(我得到 0xb
,而不是 0xb00000000000000
)。
提前致谢!