Mac / Windows不同格式的in_addr结构(IPv4地址)

我将一些Windows代码移植到Mac。 我遇到了一些使用typesin_addr代码,并在这里find了Windows实现的文档: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms738571%28v=vs.85%29的.aspx

特别是我遇到的问题是代码试图访问in_addr,编译器(CLang)抱怨不存在的S_un属性。 看一下Mac实现的定义,我得到这个(在usr/include/netinet/in.h ):

 struct in_addr { in_addr_t s_addr; }; 

…和in_addr_t定义如下(在usr/include/sys/types.h ):

 typedef __uint32_t in_addr_t; 

有没有人知道一个很好的解决方法,或者如果在Mac上的IPv4地址表示更紧密地绑定到Windows实现?

看到我的评论。 但也…你可以在你的代码中实现窗口声明(只是不要叫它in_addr,以避免冲突)。 你可以做这样的事情:

  typedef struct Win_in_addr { union { struct { __uint8_t s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { __uint16_t s_w1,s_w2; } S_un_w; __uint32_t S_addr; } S_un; } Win_IN_ADDR, *Win_PIN_ADDR, *Win_LPIN_ADDR; 

但是请注意,这不是可移植的,只能在小端CPU上按照预期工作。