c语言转化16进制
求助c语言16进制转化 对每个字符进行判断超过f的字符非法 #include <stdio.h>
int hex2dec(char* hex,int* index){
int dec=0,i=0;
char * str=hex;
char ch=65;
while ((ch=*str++)!='\0'){
(*index)++;
if (ch>='0' && ch<='9')
dec=dec*16+ch-'0';
else if(ch>='A' && ch<='F')
dec=dec*16+ch-55;
else if(ch>='a' && ch<='f')
dec=dec*16+ch-87;
else if ((ch==' ' ||ch=='\n'||ch==9)&&dec==0)
continue;
else if (dec){
printf("该字符串只有部分正确,已经转换,剩余部分丢弃。\n");
break;
}
else{
printf("该字符串格式不正确,无法转换。\n");
break;
}
}
return dec;
}
int main(void) {
char hex;
int dec,index=-1;//index表示转换部分的下标
scanf("%s",hex);
dec=hex2dec(hex,&index);
char *hex1=new char ;
hex1=hex;
hex1='\0';//若原字符串不需要了,这三行可以去掉,直接在原字符串上修改,hex='\0';
if (index)
printf("%s转为十进制为%d",hex1,dec);
delete []hex1;
return 0;
} 转载于https://blog.csdn.net/zhangjianjun521/article/details/79081435#include <stdio.h>
#include <string.h>
/* 十六进制数转换为十进制数 */
long hexToDec(char *source);
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch);
int main()
{
char *hex = "75BCD15";
printf("16进制数:\t%s\n", hex);
printf("10进制数:\t%ld\n", hexToDec(hex));
return 0;
}
/* 十六进制数转换为十进制数 */
long hexToDec(char *source)
{
long sum = 0;
long t = 1;
int i, len;
len = strlen(source);
for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}
return sum;
}
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch)
{
if(ch >= '0' && ch <= '9')
{
return ch - '0';
}
if(ch >= 'A' && ch <='F')
{
return ch - 'A' + 10;
}
if(ch >= 'a' && ch <= 'f')
{
return ch - 'a' + 10;
}
return -1;
} sunrise085 发表于 2020-4-8 13:55
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误 nbuzjj123 发表于 2020-4-14 16:31
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误
提示什么错误,你倒是说出来啊。。。。。
nbuzjj123 发表于 2020-4-14 16:31
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误
我猜应该是动态创建数组的问题。
你可以将这一行修改一下
#include <stdlib.h>//程序前面需要加上这个头文件哟
char *hex1=(char*) malloc (index * sizeof(char));
另外,这里并不是重点吧。重点是前面的函数。 sunrise085 发表于 2020-4-14 16:44
我猜应该是动态创建数组的问题。
你可以将这一行修改一下
ok了,刚才有事情不在,谢谢{:10_277:}
页:
[1]