-1

私は C が初めてで、これら 4 つの整数を 1 つの整数に結合しようとしています。

srand(time(NULL));
int intOne = 1+rand()%255;
int intTwo = 1+rand()%255;
int intThree = 1+rand()%255;
int intFour = 1+rand()%255;

int allCombined = ("%i.%i.%i.%i", intOne, intTwo, intThree, intFour);
printf("%i", allCombined);

これら 4 つの整数を組み合わせて、IP アドレス形式の 1 つの変数にするだけです。

例: 108.41.239.216

それらを組み合わせて、後で使用するために変数に保存するにはどうすればよいですか?

4

3 に答える 3

1

これを行うには多くの方法があり、正しい方法は 1 つではありません。(コードのスニペットのコンテキストで) 私に思いついた自然な解決策は、それらを長さ 4 の整数の配列に格納することです。その後、それぞれをフォーマットできます。例えば:

int ip_address[ 4 ] = { intOne, intTwo, intThree, intFour };

...そして、それを使いたいときはいつでも次のようになります:

printf( "%d.%d.%d.%d", ip_address[ 0 ], ip_address[ 1 ], ip_address[ 2 ], ip_address[ 3 ] );

...これは、IPアドレスの一部にアクセスする必要がある場合にも利点をもたらします.O(1)でこれを行うことができます.

于 2013-08-15T19:03:21.220 に答える
0

それらを組み合わせることができるいくつかの方法を次に示します。

  1. 4 バイトすべてを符号なし 32 ビット整数に保存します。最初のバイトはビット 0 ~ 7 に入り、2 番目のバイトはビット 8 ~ 15 に入ります。
  2. 4 つの値を含む を作成しstructます。ipAddress.firstOctet次に、それらを、ipAddress.secondOctetなどとして参照できます。
  3. ipAddress[0]ipAddress[1]などの 4 バイトの配列を作成します 。
于 2013-08-15T19:07:39.677 に答える
0

これを試して:

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
  srand(time(NULL ));
  int intOne = 1 + rand() % 255;
  int intTwo = 1 + rand() % 255;
  int intThree = 1 + rand() % 255;
  int intFour = 1 + rand() % 255;

  {
    struct in_addr ia = { 
      (intOne << 0) + (intTwo << 8) + (intThree << 16) + (intFour << 24) /* Here you initialise the integer. */
    };

    printf("0x%x", ntohl(ai.s_addr)); /* Convert the integer to the correct byte order (endianness) and print it. */
    printf("%s\n", inet_ntoa(ia)); /* Here you get the dotted version. */
  }

  return 0;
}
于 2013-08-15T19:19:37.300 に答える