nbuzjj123 发表于 2020-4-8 09:37:47

c语言转化16进制

求助c语言16进制转化

BngThea 发表于 2020-4-8 10:10:35

对每个字符进行判断
超过f的字符非法

sunrise085 发表于 2020-4-8 13:55:44

#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;
}

xiaosi4081 发表于 2020-4-8 18:09:30

转载于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;
}

nbuzjj123 发表于 2020-4-14 16:31:37

sunrise085 发表于 2020-4-8 13:55


大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误

sunrise085 发表于 2020-4-14 16:41:59

nbuzjj123 发表于 2020-4-14 16:31
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误

提示什么错误,你倒是说出来啊。。。。。

sunrise085 发表于 2020-4-14 16:44:53

nbuzjj123 发表于 2020-4-14 16:31
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误

我猜应该是动态创建数组的问题。
你可以将这一行修改一下
#include <stdlib.h>//程序前面需要加上这个头文件哟
char *hex1=(char*) malloc (index * sizeof(char));
另外,这里并不是重点吧。重点是前面的函数。

nbuzjj123 发表于 2020-4-14 17:40:59

sunrise085 发表于 2020-4-14 16:44
我猜应该是动态创建数组的问题。
你可以将这一行修改一下



ok了,刚才有事情不在,谢谢{:10_277:}
页: [1]
查看完整版本: c语言转化16进制