C/C++ —— 十六进制类型字符串的转换
来源:互联网 发布:c语言编程分步函数 编辑:程序博客网 时间:2024/05/17 07:19
在实际工作中,字符串和其它数据类型的转换是很常见的,库函数有很多,比如 atoi , strtol ,sscanf 等,这些函数网上有很多资料,
我经常用到的就是十六进制的数值以字符串的形式传输,然后又要解析,这里记录一下我这边的做法:
将2个字节的十六进制的字符串转成short int 2个字节的整形数据:
撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/39054969
short int xstrtoshortint(char *str){ //int len=strlen(str); short int ivalue = 0; //这里转换为2个字节的整形数 if((len/2)>sizeof(ivalue)) { printf("left overflow \n");//会左溢出 } int ioffset = 0; //移位 char *ptr; //字符指针 ptr = str; //从头开始 while (*ptr != '\0') //到最后为字符串结束符 { ivalue = ivalue << ioffset; //第一次不移位,之后每次左移4bit,十六进制一个字符代表4bit if ((*ptr <= '9' && *ptr >= '0')) { ivalue = ivalue + (*ptr - '0');//ASCALL 码相减 } else if ((*ptr >= 'a' && *ptr <= 'f')) { ivalue = ivalue + (*ptr - 'a') + 10; } else if ((*ptr >= 'A' && *ptr <= 'F')) { ivalue = ivalue + (*ptr - 'A') + 10; } // 给ivalue低位4bit 赋值 ptr++; ioffset = 4; } return ivalue;}
也可以这样,原理是一样的,只是换一种方式:
short int xstrtoshortint(char *str){ int len = strlen(str); short int ivalue = 0; for (int i = 0; i < len; i++) { if ((str[i] <= '9' && str[i] >= '0')) { ivalue = ivalue * 16 + (str[i] - '0'); //16进制 可换其它进制 } else if ((str[i] >= 'a' && str[i] <= 'f')) { ivalue = ivalue * 16 + (str[i] - 'a') + 10; } else if ((str[i] >= 'A' && str[i] <= 'F')) { ivalue = ivalue * 16 + (str[i] - 'A') + 10; } } return ivalue;}
比如 调用xstrtoshortint("1A4e"),可以得到一个 0x1A4e 的short int 数据, 如果要转其它数据类型,原理相似!
转字符串的话,sprintf函数是最常用的!
2 0
- C/C++ —— 十六进制类型字符串的转换
- C语言十六进制数据同字符串的相互转换
- C语言十六进制数据同字符串的相互转换
- C语言十六进制数据同字符串的相互转换
- 十六进制字符串、char数组的转换: c c++ java
- C语言十六进制数据同字符串的相互转换
- C语言将十六进制字符串转换成对应的十进制数字
- C:数组转换十六进制式的字符串输出。
- 十六进制字符串 char 数组 转换 c/c++
- C语言 十六进制字符转换为字符串
- 十六进制字符串与其他类型的转换
- [C/C++]_[十六进制字符串转换数值并写入文件]
- 十六进制字符串 char 数组 转换 c/c++/java
- C/C++-将一个十六进制的字符串型的数字转换成整型数字.
- Qt(C++)将字符串输入框中的数字字符串转换成十六进制命令的方法。
- [C#] 十六进制 与 十进制 的互相转换
- C#——类型转换
- C#——类型转换
- iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
- CArray的用法
- MySQLdb for Python使用指南
- CellEnter 的用法
- shell脚本中>/dev/null 和 2>&1
- C/C++ —— 十六进制类型字符串的转换
- Java之基于字节流文件的写入和读取
- VS2013下安装OpenCV2.4.8
- Vivado HLS之滤波器实现
- 其中Android平板具有电容式触摸屏
- js(jQuery)获取时间的方法及常用时间类
- Hadoop配置datanode
- Oracle数据库Where条件执行顺序 及Where子句的条件顺序对性能的影响
- 【LeetCode】Copy List with Random Pointer 解题报告