首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android - Formatter.formatIPAddress不推荐使用API 12

问Android - Formatter.formatIPAddress不推荐使用API 12
EN

Stack Overflow用户
提问于 2013-06-12 08:30:37
回答 2查看 7.9K关注 0票数 9

我看到该方法已被弃用,应该替换为getHostAddress()。

我的问题是,getHostAddress是如何替代的?我似乎不能让它做任何接近相同的事情。

我要做的是获取子网掩码的整数表示形式,并将其转换为字符串。

formatIPAddress完美地做到了这一点。

例如,我的子网掩码是"255.255.255.192“。WifiManager返回的整数值是105696409。formatIPAddress会正确返回此消息。

我似乎无法让getHostAddress正常工作,更不用说将整数值转换为子网掩码字符串了。

可以工作的示例代码

代码语言:javascript
复制
WifiManager wm = (WifiManager) MasterController.maincontext.getSystemService(Context.WIFI_SERVICE);

DhcpInfo wi = wm.getDhcpInfo();


int ip = wm.getDhcpInfo().ipAddress;
int gateway = wm.getDhcpInfo().gateway;
int mask = wm.getDhcpInfo().netmask;

String maskk = Formatter.formatIpAddress(mask);

有谁有这方面的经验吗?我可以从格式化程序类中获取源代码并使用它。但我只想使用新的方法。

EN

回答 2

Stack Overflow用户

发布于 2013-06-12 09:32:54

您必须将int转换为byte[],然后使用该数组实例化InetAddress:

代码语言:javascript
复制
...
int ipAddressInt = wm.getDhcpInfo().netmask;
byte[] ipAddress = BigInteger.valueOf(ipAddressInt).toByteArray();
InetAddress myaddr = InetAddress.getByAddress(ipAddress);
String hostaddr = myaddr.getHostAddress(); // numeric representation (such as "127.0.0.1")

现在我看到格式化程序需要小端字符,而bigInteger.toByteArray()返回大端字符表示,所以byte[]应该颠倒过来。

票数 4
EN

Stack Overflow用户

发布于 2018-03-30 11:41:40

您可以使用String.format为每个八位字节创建一个字节掩码:

代码语言:javascript
复制
...
int ipAddress = wm.getDhcpInfo().netmask;
String addressAsString = String.format(Locale.US, "%d.%d.%d.%d",
                            (ipAddress & 0xff),
                            (ipAddress >> 8 & 0xff),
                            (ipAddress >> 16 & 0xff),
                            (ipAddress >> 24 & 0xff));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17055946

复制
相关文章

相似问题

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