java - Guava - InetAddress.coerceToInteger 返回 int 而不是 long

标签 java guava inetaddress

我有一个关于 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/

相关文章:

java - 如何使我的 Java JSONArray 嵌套并添加字段?

java - 使用哪些缓冲区从 ServerSocket 创建的 Socket 接收输入流?

java - 安卓如何获取DeviceID?

java - Guava 约束发生了什么?

java - ClassPath.getTopLevelClasses() 应该返回 `java.*` 包吗?

java - XMLStreamWriter 输出无效字符(不编码换页)

java - 子类化 Guava 的 ImmutableSet 的适当方法

java - 将 IPV4 地址从字节转换为字符串

java - GWT开发模式错误

Java InetAddressClass getAllByNAme 方法