搜索
bottom↓
回复: 6

单片机通信之求十六进制字符串转化为字符数组的程序以及你们对程序的解释

[复制链接]

出0入0汤圆

发表于 2011-10-18 09:50:06 | 显示全部楼层 |阅读模式
void Hex2Byte(uchar*str,ucha*byte)
{
     uchar tmp;
     while(*str!=0)
       {
           tmp=((*str)<<4)&0xf0;
           str++;
           if(*str==0)
           {
              *byte=(tmp>>4)&0x0f;
              return;
           }
           tmp+=(*str)&0x0f;
           *byte=tmp;
           byte++;         
       }

}
这个破程序就是流行很多书籍的一个关于十六进制字符串转换成字符数组的一个小程序,
但是我怎么也看不懂,我自我反思是因为,我对单片机存储字母的方式不甚了解。如果
哪位大侠对这个比较了解,可以结合这个程序给我上一课,好吗?
万分感激

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-10-18 10:16:26 | 显示全部楼层
看错了

出0入0汤圆

发表于 2011-10-18 10:57:20 | 显示全部楼层
看不懂
十六进制字符串 和 字符数组 有什么区别,结尾的 \0 吗?

出0入0汤圆

发表于 2011-10-18 13:07:21 | 显示全部楼层
你的问题描述不清楚.
按我的理解,HEX应该是类似于某些工具生成的HEX文件,如果那样的话,这个程序是不正确的.

出0入0汤圆

 楼主| 发表于 2011-10-18 14:22:58 | 显示全部楼层
我懂了,比如主机要发十进制数字35.
首先主机把它变成十六进制数字:0x23;即二进制数字:00100011;
好,针对二进制的数字高四位:0010,它的十六进制数字是“2”
此时我查表得“2”的ASII码是:00110010,(当然单片机是用自己的程序算出ASII码值)即(0x32)将它赋值给SBUF,发出去
然后,针对二进制的数字低四位:0011,它的十六进制数字是“3”
此时查表得“3”的ASII码是:00110011,即(0x33),然后将将它赋值给SBUF,发出去
上面这个过程就是把字符数组转换为十六进制字符串的基本过程,当然发完所有的东西以后
尾部还要发一个"\0"表示字符串结尾,上面的问题就是在这个背景下提出的
现在进入正题:
比如说,从机接受上面的数据。首先接收到的是00110010,然后接收到的是:00110011
上面的程序就是把接收这两个字节的数据,然后拼成一个字节的数据,而且这个数据就是十进制的35
我现在把程序处理数据的步骤系统说一遍
首先接收到的是00110010,这个数字算术左移四位是:00100000,然后与0xf0相与,其实还是:00100000
其次接收到的是00110011,这个数字与0x0f相与,变成:00000011
然后:00100000+00000011=00100011,正好是我们要发送的数字:十进制数字35
从这个算法中我们总结一下就是:主机会把四个bit,变成一个Byte,发出去
然后从机会把接收到的这个Byte,通过一些计算,还原成最初的那四个bit
这个就是使用十六进制ASII码传送数据的基本方式
虽然这个问题很小,有的人一思考便知晓其中的内涵,但是我开始接触这个,想破脑壳也想不出来
中午和实验室哥们讨论问题的时候,受了师兄启发,茅塞顿开
这段程序很多书上都是,确实很好,当时我还以为是个错误程序,现在觉得是我错了

出0入0汤圆

发表于 2011-10-18 14:52:22 | 显示全部楼层
不是很懂 值得学习

出0入0汤圆

发表于 2013-4-9 21:54:39 | 显示全部楼层
请问楼主用什么方式通信是用ASCII方式啊,我用串口发uint8类型数据35到串口,串口助手显示的是0x32,这是不是说明串口通信没用到你的这种方式啊??、
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 10:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表