鱼C论坛

 找回密码
 立即注册
查看: 1097|回复: 7

[已解决]c语言转化16进制

[复制链接]
发表于 2020-4-8 09:37:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助c语言16进制转化
最佳答案
2020-4-8 13:55:44
  1. #include <stdio.h>
  2. int hex2dec(char* hex,int* index){
  3.     int dec=0,i=0;
  4.     char * str=hex;
  5.     char ch=65;
  6.     while ((ch=*str++)!='\0'){
  7.         (*index)++;
  8.         if (ch>='0' && ch<='9')
  9.             dec=dec*16+ch-'0';
  10.         else if(ch>='A' && ch<='F')
  11.             dec=dec*16+ch-55;
  12.         else if(ch>='a' && ch<='f')
  13.             dec=dec*16+ch-87;  
  14.         else if ((ch==' ' ||ch=='\n'||ch==9)&&dec==0)
  15.             continue;
  16.         else if (dec){
  17.             printf("该字符串只有部分正确,已经转换,剩余部分丢弃。\n");
  18.             break;
  19.         }
  20.         else{
  21.             printf("该字符串格式不正确,无法转换。\n");
  22.             break;
  23.         }
  24.     }
  25.     return dec;
  26. }
  27. int main(void) {
  28.     char hex[100];
  29.     int dec,index=-1;//index表示转换部分的下标
  30.     scanf("%s",hex);
  31.     dec=hex2dec(hex,&index);
  32.     char *hex1=new char [index];
  33.     hex1=hex;
  34.     hex1[index]='\0';//若原字符串不需要了,这三行可以去掉,直接在原字符串上修改,hex[index-1]='\0';
  35.     if (index)
  36.         printf("%s转为十进制为%d",hex1,dec);
  37.     delete []hex1;
  38.         return 0;
  39. }
复制代码

这个判断合法的函数怎么写啊

这个判断合法的函数怎么写啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-8 10:10:35 | 显示全部楼层

回帖奖励 +4 鱼币

对每个字符进行判断
超过f的字符非法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 13:55:44 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. int hex2dec(char* hex,int* index){
  3.     int dec=0,i=0;
  4.     char * str=hex;
  5.     char ch=65;
  6.     while ((ch=*str++)!='\0'){
  7.         (*index)++;
  8.         if (ch>='0' && ch<='9')
  9.             dec=dec*16+ch-'0';
  10.         else if(ch>='A' && ch<='F')
  11.             dec=dec*16+ch-55;
  12.         else if(ch>='a' && ch<='f')
  13.             dec=dec*16+ch-87;  
  14.         else if ((ch==' ' ||ch=='\n'||ch==9)&&dec==0)
  15.             continue;
  16.         else if (dec){
  17.             printf("该字符串只有部分正确,已经转换,剩余部分丢弃。\n");
  18.             break;
  19.         }
  20.         else{
  21.             printf("该字符串格式不正确,无法转换。\n");
  22.             break;
  23.         }
  24.     }
  25.     return dec;
  26. }
  27. int main(void) {
  28.     char hex[100];
  29.     int dec,index=-1;//index表示转换部分的下标
  30.     scanf("%s",hex);
  31.     dec=hex2dec(hex,&index);
  32.     char *hex1=new char [index];
  33.     hex1=hex;
  34.     hex1[index]='\0';//若原字符串不需要了,这三行可以去掉,直接在原字符串上修改,hex[index-1]='\0';
  35.     if (index)
  36.         printf("%s转为十进制为%d",hex1,dec);
  37.     delete []hex1;
  38.         return 0;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 18:09:30 | 显示全部楼层
转载于https://blog.csdn.net/zhangjianjun521/article/details/79081435
  1. #include <stdio.h>
  2. #include <string.h>

  3. /* 十六进制数转换为十进制数 */
  4. long hexToDec(char *source);

  5. /* 返回ch字符在sign数组中的序号 */
  6. int getIndexOfSigns(char ch);

  7. int main()
  8. {
  9.     char *hex = "75BCD15";

  10.     printf("16进制数:\t%s\n", hex);
  11.     printf("10进制数:\t%ld\n", hexToDec(hex));

  12.     return 0;
  13. }

  14. /* 十六进制数转换为十进制数 */
  15. long hexToDec(char *source)
  16. {
  17.     long sum = 0;
  18.     long t = 1;
  19.     int i, len;

  20.     len = strlen(source);
  21.     for(i=len-1; i>=0; i--)
  22.     {
  23.         sum += t * getIndexOfSigns(*(source + i));
  24.         t *= 16;
  25.     }  

  26.     return sum;
  27. }

  28. /* 返回ch字符在sign数组中的序号 */
  29. int getIndexOfSigns(char ch)
  30. {
  31.     if(ch >= '0' && ch <= '9')
  32.     {
  33.         return ch - '0';
  34.     }
  35.     if(ch >= 'A' && ch <='F')
  36.     {
  37.         return ch - 'A' + 10;
  38.     }
  39.     if(ch >= 'a' && ch <= 'f')
  40.     {
  41.         return ch - 'a' + 10;
  42.     }
  43.     return -1;
  44. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2020-4-14 16:31:37 | 显示全部楼层

大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

提示什么错误,你倒是说出来啊。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我猜应该是动态创建数组的问题。
你可以将这一行修改一下
  1. #include <stdlib.h>//程序前面需要加上这个头文件哟
  2. char *hex1=(char*) malloc (index * sizeof(char));
复制代码

另外,这里并不是重点吧。重点是前面的函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:40:59 | 显示全部楼层
sunrise085 发表于 2020-4-14 16:44
我猜应该是动态创建数组的问题。
你可以将这一行修改一下

ok了,刚才有事情不在,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 18:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表