2012-08-10 89 views
0

所以基本上我想用特定的地址初始化in_addr_t並從文本中解析它毫無意義。人們很容易做這樣的事情:在沒有文本解析的情況下初始化in_addr_t

in_addr_t foo = network_byte_order(127 << 24 | 0 << 16 | 0 << 8 | 99 << 0}; 

對於127.0.0.99,然後在宏包裝它,所以它的工作原理方便任何地址...不過我首先要檢查是否有人知道這方面的任何現有的宏,最好是「官方」?

+0

你應該投<<可uint32_t的,以避免溢出,即#定義IPADDR(A,B,C,d)(((uint32_t的)一<< 24)的左操作數|((uint32_t的)b << 16 )|((uint32_t)c << 8)|((uint32_t)d << 0)) – 2012-08-10 21:06:27

+0

使用char [4]和uint32的聯合? – Gir 2012-08-10 21:07:46

+0

@Gir那是不確定的行爲我相信 – 2012-08-10 21:08:28

回答

1

這裏沒有現有的宏。看看INADDR_LOOPBACK如何在netinet/in.h中定義這個例子。它只是一個十六進制常數,比你更簡單的方法:

# define INADDR_LOOPBACK  ((in_addr_t) 0x7f000001) /* Inet 127.0.0.1. */ 

所以你的方法很好。

你應該在你的位置功能network_byte_order的使用標準htonl()

相關問題