-1

ユニオン ライブラリ winsock.h を使用して数値を ipv4 アドレスに変換する方法について質問があります。

#ifdef obsolete
        union {
                struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { u_short s_w1,s_w2; } S_un_w;
                u_long S_addr;
        } S_un;
4

2 に答える 2

1

これはそれを行う1つの方法です:

S_un addr;

addr.S_addr = htonl( 2655715960 );

printf("%hhu.%hhu.%hhu.%hhu  %hhX:%hhX:%hhX:%hhX \n",
       addr.S_un_b.s_b1, addr.S_un_b.s_b2, addr.S_un_b.s_b3, addr.S_un_b.s_b4,
       addr.S_un_b.s_b1, addr.S_un_b.s_b2, addr.S_un_b.s_b3, addr.S_un_b.s_b4 );

マジック ナンバー2655715960は、コメントからの入力値の例です。コードは必要な行を出力します:

158.75.2.120  9E:4B:2:78

注: 16 進数を使用して IPv4 アドレスを出力することは一般的ではありません。

注 2:struct in_addrの代わりに使用しS_unます。したがってinet_ntoa、IP番号を文字列に変換する関数を使用できます。

于 2013-04-17T19:57:14.303 に答える
0

私の魔法のガラス球を使って、ここで何が求められているかを推測しようとしています:

sockaddr_storageは、IPv6 アドレスだけでなく IPv4 アドレスも使用できます。

ss_family内部に何が格納されているかを示します。

その設定に応じて、sockaddr_in(IPv4 の場合) またはsockaddr_in6(IPv6 の場合) ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms740496(v=vs.85).aspx ) になります。

于 2013-04-17T17:52:08.240 に答える