Ido*_*Ido 4 java inetaddress guava
我有一个关于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();
Run Code Online (Sandbox Code Playgroud)
要将32位有符号值视为32位无符号值,您可以
int address32 = ...
long address = address32 & 0xFFFFFFFFL;
Run Code Online (Sandbox Code Playgroud)
但是,在大多数情况下,您不需要这样做.