9

我看到该方法已被弃用,替换应该是 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);

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

4

2 回答 2

4

您必须将 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[] 应该反转。

于 2013-06-12T01:32:53.703 回答
1

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

...
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));
于 2018-03-30T03:41:39.943 回答