符号化されていないint配列から10進数へ
-
14-11-2019 - |
質問
私は4桁のヘキサを12月に変換しようとしていますが、成功しませんでした。 これが私のコードです。
unsigned int array[4];
printf("Type in 4-digit hexa: \n");
scanf("%x", &array);
while(getchar() != '\n');
printf("Your number in dec is %u \n", array);
.
私はそれを何が問題なのかわからないが、それは正しいDEC出力を与えないでしょう。 私がEeffに入れるときのように、それは61183を与えることになっていましたが、プログラムは65518の印刷を続けました。
この数はどこからですか?コードの何が問題なのですか?私は、FFFFが65385に等しく、符号なしINTの範囲は0~65535であるという私の考慮に従って、unsigned intを使用しました。データの範囲内に問題はありません。
私が今考えることができる唯一のものはいくつかの検索を終えたことです。 説明を読みましたが、まったく理解できませんでした。
私は知っています、これは重複するかもしれませんが、私はここにいます私は簡単な説明を求めています これがうまくいかないのか正直に言うと、私はこのサイトとプログラミングの両方のために絶対に新しいことですので、コーディングで私に簡単に行ってください。 FYI、私はStdio.hの外側に何も知らない。
解決
You are passing a pointer, array
, to printf()
. There is no need for an array here, what you're trying to scan and print is a single number.
unsigned int number;
printf("Type in 4-digit hex:\n");
if (scanf("%x", &number) == 1)
printf("Your number in dec is %u \n", number);
Also note that it's considered a good idea to check if scanf()
succeeds or not, by inspecting the return value.
他のヒント
You don't need an array for that:
unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);
a. print array[0]
, not array
.
(optional) b. scan to array
, not to &array
.
c. what is the point of the getchar()
?
No, you must input as string to a point of characters. After that, you convert to number. Ex
char *str=char[10];
int i=0,num=0;
printf("Type in 4-digit hexa: ");
scanf("%s",str);
for(i=0;str[i]!='\0';i++)
if(str[i]>='0' && str[i]<='9') num=16*num+str[i]-'0';
else if(str[i]>='a' && str[i]<='f') num=16*num+str[i]-'a';
else if(str[i]>='A' && str[i]<='F') num=16*num+str[i]-'A';
printf("Dec is %d",num);