2013-04-18 75 views
0

我有一個IP地址,像這樣:IP地址爲二進制用C

address = '192.168.1.11'; 

,並需要將其轉換成其二進制格式

11000000 10101000 00000001 00001011 

我對如何leftshift小數的一些想法數量和使用inet_addr,但不知道我會如何去做。

謝謝,我還是新來C.

+0

你想打印的二進制字符串,或者只是有可用的4個數字分別?困難的部分是將一個8位數字轉換爲一串二進制數字;標準C中沒有簡單的功能來做AFAIK。 – 2013-04-18 02:26:40

+1

@JonathanLeffler我懷疑OP實際上只是想將它轉換爲本地整數類型,而不是「二進制格式」。大多數人對錶示的概念感到困惑。 – 2013-04-18 02:31:22

+0

你不想解析「通過」'。'; '。'告訴你什麼時候你到了一個數字的末尾。如果您要發佈一些代碼,您可以獲得更好的幫助,以便人們可以看到您遇到問題的位置。 – 2013-04-18 02:40:52

回答

2

有一個專門用於將文本IP轉換爲32位「longip」地址的套接字函數,但在這種情況下這可能是不必要的。一個簡單的形式是使用sscanf()解析它:

char ip[] = "192.168.1.11"; 
int n1, n2, n3, n4; 
sscanf(ip, "%d.%d.%d.%d", &n1, &n2, &n3, &n4). 

// Result: 

// n1 = 192 
// n2 = 168 
// n3 = 1 
// n4 = 11 
4

可以使用inet_addr(3)函數將字符串轉換爲in_addr_t,然後將其轉換成二進制。沒有標準庫函數可以將數字轉換爲二進制,但使用按位邏輯運算符可以非常簡單。

+0

我已經看過整個文檔,但不知道如何將in_addr_t轉換爲二進制文件?感謝您的建議。 – 2013-04-18 02:30:31

+0

'inet_addr'以網絡字節順序將字符串轉換爲32位int,但沒有跡象表明OP需要這樣做,並且很難以機器(endian)獨立的方式使用它。 – 2013-04-18 02:36:25