1

我正在将一些 Windows 代码移植到 Mac。我遇到了一些使用该类型的代码,in_addr并在此处找到了 Windows 实现的文档:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms738571%28v=vs.85%29。 aspx

具体来说,我遇到的问题是代码试图访问S_unin_addr 的属性,编译器(CLang)抱怨该属性不存在。查看 Mac 实现的定义,我得到了这个(in usr/include/netinet/in.h):

struct in_addr {
    in_addr_t s_addr;
};

...并in_addr_t定义如下(in usr/include/sys/types.h):

typedef __uint32_t      in_addr_t;

有谁知道一个很好的解决方法,或者 Mac 上是否存在与 Windows 实现更密切相关的 IPv4 地址表示?

4

1 回答 1

1

看我的评论。而且...您可以在代码中实现 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 上按预期工作。

于 2012-09-14T11:28:40.387 回答