在 Java 中如何存储 IP

Zac*_*443 2 java mysql type-conversion

我正在将 Java 程序连接到 MySQL 数据库,因此我需要 IP 来连接它。对 IP 进行硬编码显然是一个坏主意,所以我做了一个配置。我唯一的问题是我不确定在变量中存储 IP 的内容。我环顾了很多地方都说 int ,但我不明白这怎么可能是正确的,因为整数没有小数。我应该怎么办?

eth*_*ous 5

编辑:Mattias F 的答案更适合您的情况。话虽这么说,我将解释为什么您听说 IP 地址可以存储在整数中。

IPv4 地址由 4 个八位字节或 4 个字节的数据组成。顺便说一句,这正是 32 位整数可以容纳的信息量。以下是双向的方法:

public static int ipStringToInteger (final String ip)
{
    int value = 0;
    final String[] parts = ip.split ("\\.");
    for (final String part : parts)
        value = (value << 8) + Integer.parseInt (part);
    return value;
}
public static String ipIntegerToString (int ip)
{
    final String[] parts2 = new String[4];
    for (int i = 0; i < 4; i++)
    {
        System.out.println ("Value : " + (ip & 0xff));
        parts2[3 - i] = Integer.toString (ip & 0xff);
        ip >>= 8;
    }
    return parts2[0] + '.' + parts2[1] + '.' + parts2[2] + '.' + parts2[3];
}
Run Code Online (Sandbox Code Playgroud)

编辑: Integer.valueOf 替换为 Integer.parseInt,感谢 Unihedron

  • @MattiasF 我的回答并不是为了与你的竞争。鉴于上下文,您的答案绝对应该是首选。我承认我的答案作为评论更合适,但是,请记住,否决票仅适用于最明显不正确和不负责任的答案 (2认同)