程式設計題 整數與IP位址間的轉換

2021-07-28 22:06:18 字數 1574 閱讀 4120

[程式設計題]整數與ip位址間的轉換

原理:ip位址的每段可以看成是乙個0-255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成乙個長整數。

舉例:乙個ip位址為10.0.3.193

每段數字             相對應的二進位制數

10                            00001010

0                             00000000

3                             00000011

193                          11000001

組合起來即為:00001010 00000000 00000011 11000001,轉換為10進製數就是:167773121,即該ip位址轉換後的數字就是它了。

每段可以看成是乙個0-255的整數,需要對ip位址進行校驗

輸入描述:

輸入 

1 輸入ip位址

2 輸入10進製型的ip位址

輸出描述:

輸出

1 輸出轉換成10進製的ip位址

2 輸出轉換後的ip位址

輸入例子:

10.0.3.193

167969729

輸出例子:

167773121

10.3.3.193

解題思路

考察進製轉換。

法1、以字串形式存放二進位制來進行處理

法2、通過位運算來完成進製轉換

注意事項:

該十進位製長整數用有符號整數存放會出錯,需要使用無符號整數unsigned。

法1:#include #include using namespace std;

/*十進位制轉二進位制___指定位數*/

string decimaltobinary( unsigned long n, string str )

return str;

}/*二進位制轉十進位制*/

unsigned long binarytodecimal( string str )

return sum;

}int main()

coutint main(){

unsigned a[4];//此處不使用unsigned會出錯

unsigned long n;

char ch;

while( cin>>a[0]>>ch>>a[1]>>ch>>a[2]>>ch>>a[3] ){

cin>>n;

/*對二進位制各位元組左移後求並集*/

unsigned long sum = (a[0]<<24) | (a[1]<<16) | (a[2]<<8) | a[3] ;

cout<> 24;

a[1] = ( n & 0x00ff0000 ) >> 16;

a[2] = ( n & 0x0000ff00 ) >> 8;

a[3] = ( n & 0x000000ff ) ;

cout<

整數與ip位址間的轉換

原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合...

整數與IP位址間的轉換

原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成 乙個長整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合...

整數與IP位址間的轉換

題目 乙個長整數。每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 本題含有多組輸入用例,每組用例需要你將乙個ip位址轉換為整數 將乙個整數轉換為ip位址 while true try str1 10.0.3.193 spli...