c语言中16进制转换为十进制

- 日理万妓 2022-06-01 01:49 325阅读 0赞
  1. 方法1:使用进制转换
  2. 转载:https://zhidao.baidu.com/question/51006929.html
  3. #include <stdio.h>
  4. #include <string.h>
  5. /* 十六进制数转换为十进制数 */
  6. long hexToDec(char *source);
  7. /* 返回ch字符在sign数组中的序号 */
  8. int getIndexOfSigns(char ch);
  9. int main()
  10. {
  11. char *hex = "75BCD15";
  12. printf("16进制数:\t%s\n", hex);
  13. printf("10进制数:\t%ld\n", hexToDec(hex));
  14. return 0;
  15. }
  16. /* 十六进制数转换为十进制数 */
  17. long hexToDec(char *source)
  18. {
  19. long sum = 0;
  20. long t = 1;
  21. int i, len;
  22. len = strlen(source);
  23. for(i=len-1; i>=0; i--)
  24. {
  25. sum += t * getIndexOfSigns(*(source + i));
  26. t *= 16;
  27. }
  28. return sum;
  29. }
  30. /* 返回ch字符在sign数组中的序号 */
  31. int getIndexOfSigns(char ch)
  32. {
  33. if(ch >= '0' && ch <= '9')
  34. {
  35. return ch - '0';
  36. }
  37. if(ch >= 'A' && ch <='F')
  38. {
  39. return ch - 'A' + 10;
  40. }
  41. if(ch >= 'a' && ch <= 'f')
  42. {
  43. return ch - 'a' + 10;
  44. }
  45. return -1;
  46. }
  47. 方法2:可以使用sscanf函数将以字符串形式的十六进制数转换为整型的十六进制
  48. sscanf函数的用法与printf函数很像,都是以格式化的形式进行操作,例如如下的例子中,sscanf("A23CD", "%x", &a);
  49. "%x"是将字符串A23CD以十六进制形式输入a中,如果将"%x"换成为"%d"的话,就是将字符串A23CD以十进制形式输入a中,这显然是错误的,因为将A23CD转换为十进制的时候,无法解析ACD等字符,所以得出的结果就是错误的。
  50. int a;
  51. sscanf("A23CD", "%x", &a);
  52. printf("%x\n",a);
  53. printf("%d\n",a);
  54. linux@ubuntu:~/test$ ./a.out
  55. a23cd
  56. 664525

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读