0
說我有16字節的IPv6地址將16字節的IPv6爲冒號分隔字符串
struct in6_addr {
uint8_t s6_addr[16];
};
我怎樣才能把它轉換成普通IPv6冒號分隔字符串表示在跨平臺的方式,沒有接入互聯網?
我可以以某種方式在char *緩衝區中sprintf嗎?
說我有16字節的IPv6地址將16字節的IPv6爲冒號分隔字符串
struct in6_addr {
uint8_t s6_addr[16];
};
我怎樣才能把它轉換成普通IPv6冒號分隔字符串表示在跨平臺的方式,沒有接入互聯網?
我可以以某種方式在char *緩衝區中sprintf嗎?
使用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]);
編輯:固定的指數錯字
所以沒有必要使用的sprintf時,他們不受任何形式的網絡字節序的轉換? – 2014-12-13 09:19:33
@飛帽網絡字節順序是最重要的字節第一,我打印它們的順序相同。我一次打印4位數字,然後是我必須轉換,但由於結構是一個字節數組,所以不需要,我可以按需要的順序選擇它們。 – Jasen 2014-12-13 09:59:15