2014-01-09 2 views
0

У меня проблема. Я отображение информации сети в моем приложении следующим образом:Информация о сети android ip перевернутая проблема

// Some wifi info 
     d=wifiManager.getDhcpInfo(); 

     s_dns1="DNS 1: "+intToIp(d.dns1); 
     s_dns2="DNS 2: "+intToIp(d.dns2);  
     s_gateway="Default Gateway: "+intToIp(d.gateway);  
     s_ipAddress="IP Address: "+intToIp(d.ipAddress); 
     s_leaseDuration="Lease Time: "+String.valueOf(d.leaseDuration);  
     s_netmask="Subnet Mask: "+intToIp(d.netmask);  
     s_serverAddress="Server IP: "+intToIp(d.serverAddress); 

все, конечно, с помощью wifiManager. Теперь у меня есть метод, чтобы преобразовать значения

public String intToIp(int i) { 

     return ((i >> 24) & 0xFF) + "." + 
      ((i >> 16) & 0xFF) + "." + 
      ((i >> 8) & 0xFF) + "." + 
      (i & 0xFF) ; 
     } 

Он работает .. Но вместо этого показывает: 192.168.0.0 он отображает 0.0.168.192 .. Как я могу решить?

+0

кроме изменения порядка на i, i >> 8 и т. Д.? – user3125280

+0

См. Также http://developer.android.com/reference/android/text/format/Formatter.html#formatIpAddress(int) – laalto

ответ

2

Просто инвертировать метод intToIp:

public String intToIp(int i) { 
    return (i & 0xFF) + "." + 
     ((i >> 8) & 0xFF) + "." + 
     ((i >> 16) & 0xFF) + "." + 
     ((i >> 24) & 0xFF); 
} 
+0

Право большое спасибо –

0

В принципе вы уже решили. Байты расположены в маленькой концевой нотации, означая, что самый старший байт (192) находится в последней позиции. То, что вы ожидаете, является большим эндиантом, который используется «людьми».

Вы можете прочитать о Endianness here.

Просто отмените порядок, в котором вы извлекаете каждый байт, и все готово.

Смежные вопросы