keil 中是否有十六进制编码转换中文转成ASCII码的函数

用C++编写16进制字符数组转ASCII码字符数组的函数
& & 在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能,虽然功能简单,但初学者写出来的代码经常会有各种问题。从16进制转为ASCII吗的功能函数,一个比较简洁的实现版本如下:
void HexToAscii( char * Dest, char * Src, int SrcLen )
& & for ( int i = 0, j = 0; i & SrcL i++ )
& & & & &char HiHalf = Src[i] && 4;
& & & & &char LoHalf = Src[i] & 0x0F;
& & & & &Dest[j++] = ( HiHalf &= 9 ) ? ( HiHalf + '0' ) : ( HiHalf - 10 + 'A' );
& & & & &Dest[j++] = ( LoHalf &= 9 ) ? ( LoHalf + '0' ) : ( LoHalf - 10 + 'A' );
& & 在以上短短几行代码里,基础比较扎实的同学比较容易发现的一个Bug是用signed char来处理二进制数据,这样当被处理的字节Src[i]是负数时就会出现错误的转换结果。同样把HiHalf和LoHalf声明为int,也是有相同Bug的。解决办法是先把Src[i]转为unsigned char,并且把HiHalf和LoHalf定义为unsigned char。
& & 一个比较隐蔽的严重问题是当Dest和Src字符数组有重叠的地址空间时,转换结果也会不对。例如Dest和Src的地址相等时,Src[0]转换为Dest[0]和Dest[1]后,Src[1]被Dest[1]覆盖,Src[1]还没转换里面的数据已经不是原来的数据了,依次类推。
& &&除此以外,传进来的指针Dest和Src都要先判断是否等于NULL,这样才能尽量保证写出安全的代码。
& &最后一点,最好把Dest和Src声明为void *类型的指针,这样对非char类型的数据调用此函数时,就不需要强制转化。
& &修正后的代码如下:
void HexToAscii( void * DestBuf, void * SrcBuf, int SrcLen )
& & if ( ( DestBuf == NULL ) || ( SrcBuf == NULL ) )
& & unsigned char * Dest = (unsigned char *) DestB
& & unsigned char * Src = (unsigned char *) SrcB
& & int DestPos = SrcLen && 1;
& & int SrcPos = SrcL
& & while ( --SrcPos &= 0 )
& & & & &unsigned char HiHalf = Src[SrcPos] && 4;
& & & & &unsigned char LoHalf = Src[SrcPos] & 0x0F;
& & & & &Dest[--DestPos] = ( HiHalf &= 9 ) ? ( HiHalf + '0' ) : ( HiHalf + 55 );
& & & & &Dest[--DestPos] = ( LoHalf &= 9 ) ? ( LoHalf + '0' ) : ( LoHalf + 55 );
& & 有兴趣的同学可以写个单元测试验证一下转化结果。或者改用效率更高的查表法来实现,更加节省计算步骤和时间。
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?2011年6月 其他开发语言大版内专家分月排行榜第二2011年4月 其他开发语言大版内专家分月排行榜第二2011年2月 其他开发语言大版内专家分月排行榜第二2010年8月 其他开发语言大版内专家分月排行榜第二
2010年11月 其他开发语言大版内专家分月排行榜第三2010年10月 其他开发语言大版内专家分月排行榜第三2010年7月 其他开发语言大版内专家分月排行榜第三
2011年6月 其他开发语言大版内专家分月排行榜第二2011年4月 其他开发语言大版内专家分月排行榜第二2011年2月 其他开发语言大版内专家分月排行榜第二2010年8月 其他开发语言大版内专家分月排行榜第二
2010年11月 其他开发语言大版内专家分月排行榜第三2010年10月 其他开发语言大版内专家分月排行榜第三2010年7月 其他开发语言大版内专家分月排行榜第三
2011年6月 其他开发语言大版内专家分月排行榜第二2011年4月 其他开发语言大版内专家分月排行榜第二2011年2月 其他开发语言大版内专家分月排行榜第二2010年8月 其他开发语言大版内专家分月排行榜第二
2010年11月 其他开发语言大版内专家分月排行榜第三2010年10月 其他开发语言大版内专家分月排行榜第三2010年7月 其他开发语言大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 十进制转十六进制代码 的文章

 

随机推荐