Concat 4整数成一个整数

KAK*_*KAK 2 c

嗨,我想整合4个整数一个整数.我使用了这里找到的c​​oncatinate函数:

/sf/answers/889037341/

我的代码:

unsigned concatenate(unsigned x, unsigned y) {
    unsigned pow = 10;
    while(y >= pow)
        pow *= 10;
    return x * pow + y;        
}

void stringtoint(){
    struct router *ptr;
    ptr=start;

    while(ptr!=NULL){
        int a;
        int b;
        int c;
        int d;

        sscanf(ptr->ip, "%d.%d.%d.%d", &a, &b, &c, &d);
        int num1 = concatenate(a,b);
        int num2 = concatenate(c,d);
        int num3 = concatenate(num1,num2);
        printf("%d\n",num3);
        ptr=ptr->next;
    };

}
Run Code Online (Sandbox Code Playgroud)

问题:

我正在处理IP地址编号,例如198.32.141.140我将它们分解为4个整数并将它们连接起来形成 19832141140,但是我的连接函数正在对较大的数字进行数学运算,如198.32.141.140(变) - > -1642695340 但它连接的是小数字的IP,例如164.78.104.1变得164781041(这是正确的)

我应该怎么解决这个问题,基本上我试图让IP例如串198.32.141.140整数19832141140

jas*_*son 12

您提出的方法可能是一个非常大的错误.你如何区分127.0.1.1127.0.0.11

将IP地址完全视为它们的处理方式要好得多.即,a.b.c.d代表

a * 256^3 + b * 256^2 + c * 256^1 + d * 256^0
Run Code Online (Sandbox Code Playgroud)

并且以这种方式完成你不可能遇到我刚才描述的问题.此外,实施是微不足道的:

unsigned int number;
number = (a << 24) + (b << 16) + (c << 8) + d
Run Code Online (Sandbox Code Playgroud)

  • @Deepak Tivari:这是一个错误.`127.0.0.11`*已经*代表一个整数,只是不是你描述的方式.`abcd`表示法只是表示整数的一种非常特殊的方式,因此它易于编写/记忆.如果要将表示转换为整数,请将其转换为实际表示的整数. (2认同)