我有一个存储在两个64位数组中的IP地址。我注意到最低有效位是在第一个字节 - 小端。减去两个IPv6地址给出错误的值
我正在减去两个只能有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
结果应该是。
我错过了什么?我尝试应用htobe64()
,同时减去地址,但也没有工作(我得到0xb
,而不是0xb00000000000000
)。
在此先感谢!
为什么不打印出你想要减去的东西?至少它会帮助你看到你正在处理的价值。 – PaulMcKenzie