我想寫一個方法,但不知道從哪裏開始將字符串轉換爲十進制格式。在Java中將IP地址轉換爲十進制等效值?
這裏是我想什麼一個例子:
我有以下字符串:
String ipAddress = "192.168.1.10 "
我想將其轉換爲相應的十進制數:
3232235786
非常感謝!
我想寫一個方法,但不知道從哪裏開始將字符串轉換爲十進制格式。在Java中將IP地址轉換爲十進制等效值?
這裏是我想什麼一個例子:
我有以下字符串:
String ipAddress = "192.168.1.10 "
我想將其轉換爲相應的十進制數:
3232235786
非常感謝!
怎麼樣(測試&工作):
String ipAddress = "192.168.1.10";
String[] addrArray = addr.split("\\.");
long ipDecimal = 0;
for (int i = 0; i < addrArray.length; i++) {
int power = 3 - i;
ipDecimal += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power)));
}
System.out.println(ipDecimal);
轉換每個段的8位二進制數,將所有4個8位二進制數連接成一個32位二進制數,然後將32位二進制數轉換爲十進制數,然後您就可以得到答案。
編輯:這裏是你如何能數字轉換和從二進制:
public static int binaryToDecimal(String bin) {
int result = 0;
int len = bin.length();
for(int i = 0; i < len; i++) {
result += Integer.parseInt(bin.charAt(i) + "") * Math.pow(2, len - i - 1);
}
return result;
}
public static String decimalToBinary(int num) {
String result = "";
while(true) {
result += num % 2;
if(num < 2)
break;
num = num/2;
}
result = reverse(result);
return result;
}
public static String reverse(String str) {
String result = "";
for(int i = str.length() - 1; i >= 0; i--)
result += str.charAt(i);
return result;
}
public class Main
{
public static void main(String[] args)
{
String ip="192.168.1.10";
String[] addrArray = ip.split("\\.");
long num = 0;
for (int i = 0; i < addrArray.length; i++)
{
int power = 3 - i;
num += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power)));
}
System.out.println(num);
}
}
輸出:
3232235786
如何:
new BigInteger(InetAddress.getByName("1.1.1.1").getAddress()).intValue()
如果我沒記錯這應該做的伎倆... obv只使用你的IP而不是1.1.1.1。
非常好,但您需要提供積極的符號參數。 – EJP 2012-07-18 22:56:44
爲了使用MaxMind或IP2Location的IP2Country-Databases,我使用了以下代碼將IP轉換爲整數。
您可以將此代碼複製粘貼到助手類中以滿足您的需要。
public static int ip2Int(String ip) {
int ipInt = 0;
String[] tokens = ip.split("\\.");
int factor = 256*256*256;
for (String t:tokens) {
ipInt += new Integer(t).intValue()*factor;
factor = factor/256;
}
return ipInt;
}
皈依的計算公式:
A.B.C.D = D + (C * 256) + (B * 256 * 256) + (A * 256 * 256 * 256)
我認爲這是因爲你和其他人都從同一個來源獲取代碼,所以人們認爲你們中的一個人將它從另一箇中複製出來,實際上你們都發現它在別的地方 – 2012-07-18 19:11:16
是的,我從其他地方複製過它,但是我製作了肯定它工作B4張貼。 – Reimeus 2012-07-18 19:12:45
@BobSinclar人們可以只看「回答時間」,看到Reimeus是第一個。 – Baz 2012-07-18 19:13:50