#include
// 转换为十进制数
unsigned p2dec(char *str,unsigned p1)
{
int i,len=strlen(str);
unsigned tmp,num=0;
for(i=len-1;i>=0;i--)
{
if(i==len-1) tmp=1;
else tmp*=p1;
/* 根据输入转换 */
if(str[i]>='0'&&str[i]<='9')
str[i]=str[i]-'0';
else if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-'a'+10;
else if(str[i]>='A'&&str[i]<='Z')
str[i]=str[i]-'A'+10;
num+=str[i]*tmp;
}
return num;
}
/* 进制转换 */
void tran(int num,unsigned p2)
{
int j;
/* 递归结束条件 */
if(num==0)return;
else
{
tran(num/p2,p2); /* 递归 */
if(num%p2>=10)
printf("%c",(num%p2-10+'A'));
else
printf("%d",num%p2);
}
}
int main(void)
{
char str[16];
unsigned p1,p2; /* 进制 */
/* 输入进制 */
printf("p1: ");
scanf("%u",&p1);
printf("p2: ");
scanf("%u",&p2);
getchar();
printf("input a number: ");
gets(str);
/* 进制转换 */
printf("result: ");
tran(p2dec(str,p1),p2);
getch();
return 0;
}
主要思想就是先把八进制转换为十进制,然后再转化为十六进制。。
//---------------------------------------------------------------------------
#include
#include
int main(void)
{
int ot;
scanf("%O",&ot);
printf("%X",ot);
return 0;
}
//---------------------------------------------------------------------------