首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的INET_NTOA和INET_ATON?

Java中的INET_NTOA和INET_ATON?
EN

Stack Overflow用户
提问于 2012-02-03 21:27:40
回答 6查看 7.8K关注 0票数 7

我使用Java (带有Spring框架),并且希望在IPv4地址的数字表示(例如2130706433)和它们的文本副本(例如127.0.0.1)之间进行转换。通常,在编程语言(通常分别称为INET_NTOAINET_ATON )中提供了实现此目的的方法,但我在Java语言中找不到它。

有人知道它们叫什么或者如何实现它们吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-03 21:41:42

看看javadoc中的InetAddress。标准API不直接支持这些函数,但您可以使用此类提取这两种表示。下面是一个小示例:

代码语言:javascript
复制
    InetAddress address = InetAddress.getLocalHost();
    byte[] byteAddress = address.getAddress();
    System.out.println(Arrays.toString(byteAddress));
    System.out.println(address.getHostAddress());

(请记住,字节是有符号的。)

如果你有长的-s,你可以使用ByteBuffer,快速和舒适的转换。方法: putLong(),然后数组()。

票数 4
EN

Stack Overflow用户

发布于 2012-02-03 21:35:35

java.net.InetAddress.getByAddress(byte[])

与INET_NTOA不完全相同,但非常相似。

带有长参数的示例:

代码语言:javascript
复制
String ntoa(long raw) {
    byte[] b = new byte[] {(byte)(raw >> 24), (byte)(raw >> 16), (byte)(raw >> 8), (byte)raw};
    try {
        return InetAddress.getByAddress(b).getHostAddress();
    } catch (UnknownHostException e) {
        //No way here
        return null;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-02-10 21:15:22

下面是我为获取文本IPv4地址的数字表示而编写的代码:

代码语言:javascript
复制
public static Long ipAsNumeric(String ipAsString) {
    String[] segments = ipAsString.split("\\.");
    return (long) (Long.parseLong(segments[0]) * 16777216L
       + Long.parseLong(segments[1]) * 65536L
       + Long.parseLong(segments[2]) * 256L + 
         Long.parseLong(segments[3]));
}

当然,这需要以有效的格式提供IPv4地址。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9129391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档