将四个整数合并为一个

时间:2013-08-15 19:00:36

标签: c integer

我是C的新手,我正在尝试将这四个整数合并为一个整数。

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);

我需要做的就是将这四个整数组合成一个IP地址格式的变量。

示例:108.41.239.216

如何将它们组合并将它们保存到变量中供以后使用?

3 个答案:

答案 0 :(得分: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)中执行此操作。

答案 1 :(得分:0)

以下是一些可以将它们组合在一起的方法:

  1. 将所有四个字节保存在无符号的32位整数中。第一个字节位于第0位到第7位,第二个字节位于第8位到第15位,等等。
  2. 创建包含四个值的struct。然后,您可以将其称为ipAddress.firstOctetipAddress.secondOctet
  3. 创建一个包含四个字节的数组:ipAddress[0]ipAddress[1]

答案 2 :(得分: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;
}