在学习和工作开发的时候 , 经常需要使用到各种各样不太常用的操作 , 这种情况一般是自己手动写一些小程序来处理 。因为它们不太常用 , 所以经常用了又没保存 , 等到下一次在使用的时候又需要重写 , 这样的非常浪费时间和精力 。
所以想在这里统一记录一下 , 以备下次重新使用 。代码以实用为主 , 如果缺陷 , 欢迎指出 。
1、十六进制字符转整型数字
功能:将16进制的字符串转换为10进制的数字 。我是没有找到相应的库函数 , 所以参考网上的代码自己手动写了个函数来实现 。
【实战总结的7个C程序,好东西不私藏】常用的函数有atoi,atol,他们都是将10进制的数字字符串转换为int或是long类型 , 所以在有些情况下不适用 。
/*=============================================================================# FileName: hex2dec.cpp# Desc: Convert a hex string to a int number# Author: Caibiao Lee# Version: # LastChange: 2018-11-26 # History:=============================================================================*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int c2i(char ch) { // 如果是数字 , 则用数字的ASCII码减去48, 如果ch = '2' ,则 '2' - 48 = 2 if(isdigit(ch)) return ch - 48; // 如果是字母 , 但不是A~F,a~f则返回 if( ch < 'A' || (ch > 'F' && ch < 'a') || ch > 'z' ) return -1; // 如果是大写字母 , 则用数字的ASCII码减去55, 如果ch = 'A' ,则 'A' - 55 = 10 // 如果是小写字母 , 则用数字的ASCII码减去87, 如果ch = 'a' ,则 'a' - 87 = 10 if(isalpha(ch)) return isupper(ch) ? ch - 55 : ch - 87; return -1; } int hex2dec(char *hex) { int len; int num = 0; int temp; int bits; int i; char str[64] = {0}; if(NULL==hex) { printf("input para error n"); return 0; } if(('0'==hex[0])&&(('X'==hex[1])||('x'==hex[1]))) { strcpy(str,&hex[2]); }else { strcpy(str,hex); } printf("input num = %s n",str); // 此例中 str = "1de" 长度为3, hex是main函数传递的 len = strlen(str); for (i=0, temp=0; i<len; i++, temp=0) { // 第一次:i=0, *(str + i) = *(str + 0) = '1', 即temp = 1 // 第二次:i=1, *(str + i) = *(str + 1) = 'd', 即temp = 13 // 第三次:i=2, *(str + i) = *(str + 2) = 'd', 即temp = 14 temp = c2i( *(str + i) ); // 总共3位 , 一个16进制位用 4 bit保存 // 第一次:'1'为最高位 , 所以temp左移 (len - i -1) * 4 = 2 * 4 = 8 位 // 第二次:'d'为次高位 , 所以temp左移 (len - i -1) * 4 = 1 * 4 = 4 位 // 第三次:'e'为最低位 , 所以temp左移 (len - i -1) * 4 = 0 * 4 = 0 位 bits = (len - i - 1) * 4; temp = temp << bits; // 此处也可以用 num += temp;进行累加 num = num | temp; } // 返回结果 return num; } int main(int argc, char **argv){ int l_s32Ret = 0; if(2!=argc) { printf("=====ERROR!======n"); printf("usage: %s Num n", argv[0]); printf("eg 1: %s 0x400n", argv[0]); return 0; } l_s32Ret = hex2dec(argv[1]); printf("value hex = 0x%x n",l_s32Ret); printf("value dec = %d n",l_s32Ret); return 0;}
推荐阅读
- 人工智能文档编写器:使用AI生成Javadocs等文档的插件扩展
- Tomcat源码篇-简单到超乎想象的启动流程
- 金俊眉属于小种红茶吗,金俊眉茶的功效与作用女人们
- 云南女儿红茶功效,女儿环茶的作用功效
- 红茶具有安神作用的茶,茶梗枕头的功效与作用点
- 验证码的前世今生
- 红茶放的时间,五红茶的功效与作用
- 高级红茶的攻效,茶芽的功效与作用
- 红茶哪里买的好,发烧吃午时茶的功效与作用
- 红茶含水分,青梅茶的功效及作用