字符串16进制存储
来源:互联网 发布:网络摄像头密码重置 编辑:程序博客网 时间:2024/05/17 02:43
上次介绍了一种字符串转化为16进制显示的算法,并封装成了API,这个API可用于串口收到数据后按16进制显示字符串,这次介绍串口按16进制发送字符串的算法,使用基于字符类型参数的模板函数实现。算法原理是遍历字符串,将在区间'0'--'9','A'--'F','a'--'f'的字符转化成对应的16进制整数(范围为闭区间0-15),如遇到连续2个可以转换的字符,则将它们存储在一个无符号字节内,如遇到不能转化的字符,则略过继续。代码如下:
/** * @brief 将字符转化为对应的10进制数整数 ASCII版本 * * 若字符不能转化则返回-1 */ template<typename charT> inline char ConvertHexChar(charT ch) { if(ch>=(charT)'0'&&ch<=(charT)'9') return ch-(charT)'0'; else if(ch>=(charT)'A'&&ch<=(charT)'F') return ch-(charT)'A'+10; else if(ch>=(charT)'a'&&ch<=(charT)'f') return ch-(charT)'a'+10; else return -1;}typedef std::vector<unsigned char> CByteArrayEx;/** * @brief 将字符串转化成对应的16进制数形式存储 * @param template charT 源字符类型 * @param src 源数据串 * @param size 要转换的长度,字符数 * @param ByteArray 存放结果的字节数组 * 如字符串80 12 34 46 AD FF,对应的就是0x80,0x12,0x34,0x46,0xAD,0xFF * 该函数会自动过滤不能转换的字符,可转换字符范围在0--9,a--f,A--F区间 */template<typename charT>inline void StrToHex(const charT* src,size_t len,CByteArrayEx& ByteArray){ char low = -1, high = -1; for (size_t n = 0; n < len; ) { high = ConvertHexChar(src[n++]); if (-1 == high) { continue; } if (n >= len) { ByteArray.push_back(high); break; } low = ConvertHexChar(src[n++]); if (-1 == low) { ByteArray.push_back(high); continue; } ByteArray.push_back(high * 16 + low); }}/** * @brief 将字符串转化成对应的16进制数形式存储 * @param template charT 源字符类型 * @param src 源数据串 * @param ByteArray 存放结果的字节数组 */template<typename charT>inline void StrToHex(const charT* src,CByteArrayEx& ByteArray){ StrToHex(src,select_variable<is_ansi_char<s_charT>::value>(strlen,wcslen)(src),ByteArray);}
转自:http://www.cppblog.com/qinqing1984/archive/2009/07/12/89877.html
- 字符串16进制存储
- 存储16进制数据的字节数组BYTE与字符串之间的互换
- 16进制字符串转为二进制字符串
- 16进制字符串转为 字符串
- 字符串转换成16进制字符串
- “分隔字符串”存储过程
- SQL分割字符串存储
- 字符串顺序存储
- 字符串存储位置
- Java字符串压缩存储
- 文件存储操作--字符串
- Java字符串压缩存储
- 数组存储字符串
- STM32存储字符串
- 字符串的存储方式
- 字符串的存储
- 实现字符串逆序存储
- 字符串存储原理
- TCP回射程序(I/O复用 select)
- .tar.xz文件的解压
- php编程,写一个函数,能够遍历一个文件夹下的所有文件和子文件夹
- hdu 4466 Triangle (12年成都区域现场赛c题)(dp+组合数学)
- 处处是可怕的灾难、
- 字符串16进制存储
- ZOJ 1076 最长上升子序列
- HDU 4473 Exam 2012成都现场赛J题(规律+思维)
- shǎ崽 OrOrOrOrz
- mac 字符串转换为二进制
- uva 331 Mapping the Swaps 求交换排序的map 纯DFS
- ZOJ 1710 The Snail
- log4j日志等级
- linux小记