10轉16進制
http://forum.slime.com.tw/thread277654.html
#include<stdio.h>
#include<stdlib.h>
int main(void){
int num,i,j,x;
char s[999];
//char str[999]; 這是多餘的
// while(scanf("%d",&num)!=EOF) 這行 scanf 沒有輸入提示,會搞到後面很難除錯
while(1)
{
printf("\nInput DEC Number: "); // 增加的輸入提示
scanf("%d",&num)!=EOF;
j=0; // 把最下面的 j=0; 移上來比較容易了解作用: s 字串陣列 index 歸零
while (num!=0)
{
i=num%16; // 取餘數
switch(i)
{
case 10:
s[j]='a';
break;
case 11:
s[j]='b';
break;
case 12:
s[j]='c';
break;
case 13:
s[j]='d';
break;
case 14:
s[j]='e';
break;
case 15:
s[j]='f';
break;
default:
// s[j]=i; 資料格式錯誤,必須要把數值格式轉換成 "文字格式"。
s[j]=48+i; // 這一行是以 ASCII 編碼直接做換算。
}
num=num/16; //取商數,下一回的被除數
j+=1;
}
s[j]='\0'; // 以據 C/C++ 語言的字串特性,給予的字串結尾符號。
// j-=1; 可以直接並到 接下來的 for loop 中。
printf("Otput HEX Number:["); // 增加的輸出顯示
//for (i=j;i>=0;i--)
// { printf("%s",s[i]); } 這是錯的,要顯示出字元,要用 %c 不然會錯誤,編譯後出現錯誤當機應該也是這裡
for (i=j-1;i>=0;i--)
{ printf("%c",s[i]); }
printf("]"); // 增加的輸出顯示
// j=0; 這行正確的作法,應該是要移到在上面的地方,需要明確的讓 s[j] 一開始規零的地方。
printf("\n");
}
return 0;
}
沒有留言:
張貼留言