こんにちは、4 つの整数を 1 つの整数に連結しようとしています。ここにある連結関数を使用しました:
https://stackoverflow.com/a/12700533/2016977
私のコード:
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;
};
}
問題:
私はIPアドレス番号を扱っています.たとえば198.32.141.140
、それらを4つの整数に分解し、それらを連結してフォーム 19832141140
にしていますが、連結関数は(becomes)のような大きな数で計算を行っています198.32.141.140
->-1642695340
しかし、小さな数字であるIPを連結しています.164.78.104.1
となる164781041
(正解)
198.32.141.140
問題を解決するにはどうすればよいですか。基本的に、IPの文字列を整数にしようとしています19832141140