开源polarssl加密库使用详解之一:十六进制字符串转化为十六进制数字
来源:互联网 发布:无锡淘宝眼镜城 编辑:程序博客网 时间:2024/05/21 06:23
第一个函数:
int unhexify(unsigned char *obuf, const char *ibuf)
在很多时候,我们要从文本中读取十六进制的密钥,或者其它信息。但是文本中是十六进制的字符,需要转换为十六进制的数字。此函就完成这样的功能。
实现代码如下:
int unhexify(unsigned char *obuf, const char *ibuf)
int unhexify(unsigned char *obuf, const char *ibuf){ unsigned char c, c2; int len = strlen(ibuf) / 2; assert(!(strlen(ibuf) %1)); // must be even number of bytes while (*ibuf != 0) { c = *ibuf++; if( c >= '0' && c <= '9' ) c -= '0'; else if( c >= 'a' && c <= 'f' ) c -= 'a' - 10; else if( c >= 'A' && c <= 'F' ) c -= 'A' - 10; else assert( 0 ); c2 = *ibuf++; if( c2 >= '0' && c2 <= '9' ) c2 -= '0'; else if( c2 >= 'a' && c2 <= 'f' ) c2 -= 'a' - 10; else if( c2 >= 'A' && c2 <= 'F' ) c2 -= 'A' - 10; else assert( 0 ); *obuf++ = ( c << 4 ) | c2; } return len;}
此代码简单,有c语言基础的都应该能看懂,不懂的人可以回复我。
与之相反的,还有一个把十六进制数字转换为十六进制字符串:void hexify(unsigned char *obuf, const unsigned char *ibuf, int len)
实现代码如下:
void hexify(unsigned char *obuf, const unsigned char *ibuf, int len){ unsigned char l, h; while (len != 0) { h = (*ibuf) / 16; l = (*ibuf) % 16; if( h < 10 ) *obuf++ = '0' + h; else *obuf++ = 'a' + h - 10; if( l < 10 ) *obuf++ = '0' + l; else *obuf++ = 'a' + l - 10; ++ibuf; len--; }}
==========================
下一篇准备讲解伪随机数发生器。
0 0
- 开源polarssl加密库使用详解之一:十六进制字符串转化为十六进制数字
- VC 数字转化为十六进制字符串
- 字符串转化为十六进制
- QT 十六进制字符串转化为十六进制编码
- 十六进制数字转化为汉字
- 十六进制字符串转换为十六进制数字
- 将字符串转化为十六进制
- 十进制字符串转化为十六进制字符串
- java十六进制字符串 转化为整形
- iOS 中十六进制字符串转化为UIColor
- 十六进制字符串转化为十进制数值
- 把一个“十六进制”字符串转换为十六进制数字输出
- 十六进制转化为二进制
- 二进制转化为十六进制
- 十六进制转化为十进制
- 十六进制转化为八进制
- 十六进制转化为十进制
- 二进制转化为十六进制
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- UVa 10034 Freckles (MST & 稠密图的O(V^2)的Prim算法)
- 在IIS中设置Session”永不过期”的问题
- Spring Data的使用
- VisualNet图形化的机房综合布线管理系统
- 开源polarssl加密库使用详解之一:十六进制字符串转化为十六进制数字
- 分号的用途,已经什么时候不能使用
- OD的内存映射窗口是怎么实现的?
- 备忘,一个月要完成的事情
- ArcGIS制图表达—河流渐变效果
- 如何在win7下安装magento
- ~/.vim和~/.vimrc不是一个目录的问题解决
- A - Stones on the Table (hdu)
- iOS读取和显示PDF文档