ESP8266 uint32 ipaddr to ip[4] array ip地址轉為char陣列
阿新 • • 發佈:2019-01-14
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。