是否可以使用 double 来存储和安全检索 128 位 IPv6?

Can double be used to store and safely retrieve 128 bit IPv6?

我们知道double可以存储从±4.94065645841246544e-324±1.79769313486231570e+308的数字。我们可以像 IPv6 一样在 double 中存储 128 位值并按原样检索吗?例如,要存储 IPv4,我们可以使用 32 位整数并将它们存储为 8 位分区。我们可以使用位掩码来检索它们。

AFAIK 的任何语言都没有存储 128 位的标准容器。我知道 double 可以安全地存储 64 位而不会出现任何精度错误,但是有没有破解方法?

如果 sizeof(double) * CHAR_BITS ≥ 128(在我的机器上是 64 位),从技术上讲你可以,但你为什么要这样做?不要重新发明轮子,而是使用 sockaddr_in6,或者,如果必须,使用 uint8_tstd::bitset.

的数组

相关回答:Efficient way to store IPv4/IPv6 addresses

我不愿意使用 double 因为 its size is unspecified

如果您需要 128 位整数,我建议使用非标准类型,如 this question 中所述。