1. 程式人生 > >32位整形數轉化為IP地址

32位整形數轉化為IP地址

昨天去參加某大型企業的軟體工程師筆試題,碰到一道程式設計題,做的不太好,於是今天找了個時間把他完整的做出來。僅供參考。

題目是大概這樣的:給一個整數,將它轉化為形如xxx.xxx.xxx.xxx的IP地址。

具體思路如下:1.首先獲取鍵盤輸入,輸入一個整形,同時獲取他的資料型別也是int型,於是考慮用scanner。2.獲取到整數後,需要將它轉化為二進位制數,而且是32位的,於是可以用一個32次的迴圈,採用位移運算子,將1位移n位,再和原數字比較,為0,說明該位是0。3.得到32位的字串後,就要將其8位8位的分割,然後每8位都要轉化為十進位制數,再將這些數用“.”連線起來。此處用一個for迴圈就可以了。

具體的程式碼如下,複製貼上就可以執行。

<span style="font-size:18px;">import java.math.BigInteger;
import java.util.Scanner;

/*本題要求:給出一個32位的整形數字,
(32位01轉化的整形)將其轉化為xxx.xxx.xxx.xxx
的ip地址的字串格式*/

public class IntToIp 
{

	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);//獲取鍵盤輸入
		while(sc.hasNextLong())
		{
			StringBuilder sip=new StringBuilder();
			StringBuilder ip=new StringBuilder();
			int i=sc.nextInt();//獲取鍵盤輸入的整數

			for (int k= 0; k < 32; k++) //將其轉化為32位二進位制數
			{
			    sip.append(i>>(31 - k) & 1);
			}
			
			System.out.println("the orginal number is:"+sip);
			
			for(int m=0;m<sip.toString().length();m+=8)//每8位向前移動一次
			{
				String str=sip.substring(m, m+7);//獲取字串的8位字元
			   BigInteger bi=new BigInteger(str,2);//將其轉化為十進位制
			   if(m!=24)//除了最後一位,數字後都要加點
			   {
				   ip.append(bi.toString());
				   ip.append(".");
			   }
			   else
			   {
				   ip.append(bi.toString());
			   }
			}
			System.out.println("IP is :"+ip.toString());
		}

	}

}
</span>