是否可以使用 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_t
或 std::bitset
.
的数组
相关回答:Efficient way to store IPv4/IPv6 addresses
我不愿意使用 double 因为 its size is unspecified。
如果您需要 128 位整数,我建议使用非标准类型,如 this question 中所述。
我们知道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_t
或 std::bitset
.
相关回答:Efficient way to store IPv4/IPv6 addresses
我不愿意使用 double 因为 its size is unspecified。
如果您需要 128 位整数,我建议使用非标准类型,如 this question 中所述。