2014-05-10 51 views
2

我有一個十六進制值,例如0x0a010203,我想將它轉換爲一個字符串,以便轉換後它應該像「10.1.2.3」,如何提取來自十六進制值的單個字段?將十六進制值轉換爲C類型字符串的IP地址。

+0

您可以使用循環提取非零數字一個接一個,然後將其轉換爲十進制數。或者您可以使用庫函數組合來解決您的問題。 – Nibnat

回答

3

填寫一個struct in_addr和使用inet_ntoa()( 「互聯網地址,以ASCII字符串」):

#include <arpa/inet.h> 

struct in_addr addr; 
addr.s_addr = htonl(0x0a010203); // s_addr must be in network byte order 
char *s = inet_ntoa(addr); // --> "10.1.2.3" 

注意,返回的字符串通過inet_ntoa()可能指向可能被後續調用覆蓋的靜態數據。如果它只是被打印,然後不再使用 ,那就沒有問題了。否則就需要重複這個字符串。

2

您可以使用位屏蔽和位移位,如:

unsigned int val = 0x0a010203; 
printf("%d.%d.%d.%d", 
    (val & 0xFF000000) >> 24, 
    (val & 0x00FF0000) >> 16, 
    (val & 0x0000FF00) >> 8, 
    val & 0x000000FF); 
相關問題