我有一个关于 Guava 的 InetAddress.coerceToInteger 的问题方法。
根据文档方法:
public static int coerceToInteger(InetAddress ip)
'无论提供的参数是否为 IPv4 地址,都返回一个表示 IPv4 地址的整数。 '
但是,IPv4 范围是无符号的 32 位,而 Java 的 int 是有符号的 - 意味着返回值只能覆盖 IPv4 相关范围的一半。
我是漏掉了什么人还是这个方法真的有问题?
谢谢
最佳答案
一个 32 位值就是一个 32 位值,它可以有 2^32 个值,无论它是有符号的还是无符号的。如果您有一个像 192.168.0.1 这样的地址,它将是一个负数,不会丢失任何信息。如果将其转换为字节(也已签名),则不会丢失任何信息。
顺便说一句:对于 IPv4 地址,您可以使用这个技巧
int address = ip.hashCode();
要将 32 位有符号值视为 32 位无符号值,您可以
int address32 = ...
long address = address32 & 0xFFFFFFFFL;
但是,在大多数情况下您不需要这样做。
关于java - Guava - InetAddress.coerceToInteger 返回 int 而不是 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258632/