2014-12-13 54 views
0

說我有16字節的IPv6地址將16字節的IPv6爲冒號分隔字符串

struct in6_addr { 
  uint8_t s6_addr[16]; 
}; 

我怎樣才能把它轉換成普通IPv6冒號分隔字符串表示在跨平臺的方式,沒有接入互聯網?

我可以以某種方式在char *緩衝區中sprintf嗎?

回答

1

使用inet_ntop()

如果你不能。

struct in6_addr a; 
char buf[40]; 
... 

sprintf(buf,"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 
    a.s6_addr[0], a.s6_addr[1], a.s6_addr[2], a.s6_addr[3], 
    a.s6_addr[4], a.s6_addr[5], a.s6_addr[6], a.s6_addr[7], 
    a.s6_addr[8], a.s6_addr[9], a.s6_addr[10], a.s6_addr[11], 
    a.s6_addr[12], a.s6_addr[13], a.s6_addr[14], a.s6_addr[15]); 

編輯:固定的指數錯字

+0

所以沒有必要使用的sprintf時,他們不受任何形式的網絡字節序的轉換? – 2014-12-13 09:19:33

+0

@飛帽網絡字節順序是最重要的字節第一,我打印它們的順序相同。我一次打印4位數字,然後是我必須轉換,但由於結構是一個字節數組,所以不需要,我可以按需要的順序選擇它們。 – Jasen 2014-12-13 09:59:15

相關問題