1. 程式人生 > >ESP8266 uint32 ipaddr to ip[4] array ip地址轉為char陣列

ESP8266 uint32 ipaddr to ip[4] array ip地址轉為char陣列

ESP8266 non_os SDK程式設計的時候發現有個需求,就是把uint32型別的ip地址,轉換為char陣列。搜了半天網上網上的c函式,但是似乎並不適合ESP8266 SDK。然後仔細研究了一下,終於找到了方法,如果大家有更簡潔的方法,歡迎提出來。

首先,ESP8266有個列印IP地址的方法:

os_printf("IP Address :"IPSTR"\r\n",IP2STR(ipaddr));

其中
IPSTR 是個格式化輸出的巨集定義 #define IPSTR "%d.%d.%d.%d"
IP2STR 是另外一個巨集定義:
#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr)


然後我們檢視ip4_addr*_16的定義為

#define ip4_addr1_16(ipaddr) ((uint16)ip4_addr1(ipaddr))
#define ip4_addr2_16(ipaddr) ((uint16)ip4_addr2(ipaddr))
#define ip4_addr3_16(ipaddr) ((uint16)ip4_addr3(ipaddr))
#define ip4_addr4_16(ipaddr) ((uint16)ip4_addr4(ipaddr))

到這裡我們就找到方法了,其實它是對ip4_addr*(ipaddr)進行了強制轉換為uint16的操作,那麼我們只需要強制轉換為char就可了。

ip[0]=(char)ip4_addr1(ipaddr)
ip[1]=(char)ip4_addr2(ipaddr)
ip[2]=(char)ip4_addr3(ipaddr)
ip[3]=(char)ip4_addr4(ipaddr)

如果大家有更好的方法,歡迎評論,我會更新這個blog。