16進数で数値を返す関数を作成したいと思います。しかし、10進数に変更した後、間違った数値が表示されます。出力では、最初の数値は2進数、2番目の数値も2進数ですが、int形式であり、3番目の数値は10進数である必要があります。しかし、10進数で間違った数値が表示されます(2行目を参照してください。220ではなく156である必要があります)。誰かが私が間違っていることを私に説明できますか、そしてどうすれば正しい数字を得ることができますか?ありがとうございました。これが私の出力です:
char *encrypted = calloc((size_t)TEXT_LEN*3, sizeof(char));
int number[TEXT_LEN];
index=0;
for(int i=0;i<TEXT_LEN;i++){
number[i]=atoi(binary[i]);
printf("%s ",binary[i]);
printf("%d ",number[i]);
printf("%d\n",(unsigned char)number[i]);
sprintf(encrypted+index,"%x ",(unsigned char)number[i]);
index+=3;
}
printf("%s\n",encrypted);
free(encrypted);
編集:コメントで解決策を見つけ、次の行で関数strtolを使用して修正しました:
number [i] = strtol(binary [i]、NULL、2);
数値が16より小さい場合、書き込まれる文字列の長さは2であり、最後に文字「\ 0」が挿入されます。固定サイズのいずれかを使用してください
sprintf(encrypted+index,"%02x ", number[i]);
index += 3;
または、書き込まれた文字列の長さであるsprintf関数からの戻り値を使用して、インデックスをインクリメントします
index += sprintf(encrypted+index,"%x ", number[i]);
私は両方の組み合わせを好む
index += sprintf(encrypted+index,"%02x ", number[i]);
2進数の8文字の文字列に基づいて、上記のuser3121023の方法では、正しい10進数が得られます。
number[i] = strtol(binary[i], NULL, 2);
printf("%s ", binary[i]); // 1st col
printf("%d\n", number[i]); // 2nd col
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加