getHostAddress() returns 一个反转的 ip 地址
getHostAddress() returns a reversed ip address
我正在尝试使用 WifiManager 和 WifiInfo 类.
获取我的手机 phone IP 地址
它returns正确的IP地址颠倒了。
public String getWifiIpAddress() {
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
byte[] ipAddress = BigInteger.valueOf(wi.getIpAddress()).toByteArray();
try {
InetAddress myAddr = InetAddress.getByAddress(ipAddress);
String hostAddr = myAddr.getHostAddress();
return hostAddr;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
结果:73.0.168.192
好的,我刚看到你的地址是反的! :)
它被称为 big/little endian 问题,阅读更多关于 Endianness 的信息,这是所有程序员必须知道的,特别是在不同操作系统上进行应用程序集成和迁移时。
从 Wifi 管理器获取连接信息后添加此内容。
int ipAddress = wi.getIpAddress();
ipAddress = (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) ?
Integer.reverseBytes(ipAddress) : ipAddress;
然后使用 toByteArray 和 getHostAddress 等继续您的代码
我正在尝试使用 WifiManager 和 WifiInfo 类.
获取我的手机 phone IP 地址它returns正确的IP地址颠倒了。
public String getWifiIpAddress() {
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
byte[] ipAddress = BigInteger.valueOf(wi.getIpAddress()).toByteArray();
try {
InetAddress myAddr = InetAddress.getByAddress(ipAddress);
String hostAddr = myAddr.getHostAddress();
return hostAddr;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
结果:73.0.168.192
好的,我刚看到你的地址是反的! :)
它被称为 big/little endian 问题,阅读更多关于 Endianness 的信息,这是所有程序员必须知道的,特别是在不同操作系统上进行应用程序集成和迁移时。
从 Wifi 管理器获取连接信息后添加此内容。
int ipAddress = wi.getIpAddress();
ipAddress = (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) ?
Integer.reverseBytes(ipAddress) : ipAddress;
然后使用 toByteArray 和 getHostAddress 等继续您的代码