1

私はいくつかの Windows コードを Mac に移植しています。この型を使用するコードに出くわし、in_addrここで Windows 実装のドキュメントを見つけました: http://msdn.microsoft.com/en-us/library/windows/desktop/ms738571%28v=vs.85%29。 aspx

特に私が抱えている問題は、コードS_unが in_addr のプロパティにアクセスしようとすることですが、コンパイラ (CLang) は存在しないと訴えています。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;

これに対する適切な回避策を知っている人はいますか、または Windows の実装により密接に結びついている Mac 上の 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 に答える