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

我的问题是如何将getHostAddress替换?我似乎无法让它在同一件事上做任何事情。

我正在尝试做的是将子网掩码的整数表示形式并将其转换为字符串。

formatIPAddress可以完美地做到这一点。

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

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

起作用的示例代码

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);

有人对此有经验吗?我可以从formatter类获取源代码,然后使用它。但我只想使用新方法。

最佳答案

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

...
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")

现在,我看到格式化程序期望little-endian和bigInteger.toByteArray()返回一个big-endian表示形式,因此byte []应该反转。

10-05 18:06