-2

プログラムを使用して、受信したパケットから送信元アドレスを抽出します。しかし、次のコードでの & 演算子の使用がわかりません:

==> アドレスを変換する関数

struct in_addr {
        unsigned long int s_addr; }

char *inet_ntoa(struct in_addr in);

==> パケットを受信

recvfrom(sockfd, buffer, sizeof(struct iphdr) + sizeof(struct icmphdr), 0, (struct sockaddr *)&connection, &addrlen)) == -1)

===> 表示元アドレス

struct iphdr* ip_reply;

/*code */

ip_reply   = (struct iphdr*) buffer;

/*code */

printf("RCV ip->daddr = %s \n",inet_ntoa(*((struct in_addr *)&ip_reply->saddr)));

&で使用する必要があるのはなぜ&ip_reply->saddrですか?

4

2 に答える 2

3

これはアドレス演算子です。オペランドを受け取り、オペランドのアドレスを返します。つまり、オペランドへのポインターを返します。

この場合、コードは へのポインターを作成しip_reply->saddr、それを へのポインターに型キャストしてから、ポインターをstruct in_addr逆参照します。これは、任意のデータをある型から別の型にキャストする方法です。

于 2013-07-05T10:35:31.857 に答える