绚紫飞鸥的个人空间 https://bbs.21ic.com/?1185562 [收藏] [复制] [RSS]

日志

ASCII码1234转INT型1234

已有 460 次阅读2017-9-6 20:31 |个人分类:程序|系统分类:单片机

最近在工作中,用到了激光位移传感器,其测得数据与单片机通过422进行通信,而数据格式为ASCII码。
大致为 % 0 1 $ R M D - 0 1 2 3 4 5 6  * * CR 这种格式,共18个字节,返回这组数据即代表测得长度为- 12.3456mm。
这就涉及到了一个将ASCII码转换为一个直接可以进行运算的类型的问题。

假设所需要的数为1 2 3 4这四位 ,这四个ASCII码对应的十六进制分别为0x31 0x32 0x33 0x34
先进行如下运算
        0x31&0x0f = 0x01;  //第一个字节与0x0f 按位与,取低四位
        0x01<<4   = 0x10;  //左移四位
        0x32&0x0f=  0x02; //第二个字节与0x0f 按位与,取低四位
        0x10|0x02 = 0x12; //拼成一个字节
后两个字节,进行同样的操作,拼成0x34

这样,1 2 3 4 四个ASCII码就可以用0x12 0x34 两个自己来传递信息,此时单片机将其发送给上位机是比较合适的。
上位机接收到之后,再次进行处理,进行如下运算
        (0x12>>4)&0xff=0x01  
         0x12&0x0f          = 0x02
        (0x34>>4)&0xff=0x03
         0x34&0x0f          = 0x04
0x01*1000+0x02*100+0x03*10+0x04=1234
这样就将 1 2 3 4 四个ascii码代表的数字换算了出来,如过原信息中有小数点,再进行相应的除运算。

工作中遇到了,暂且记录一下,如过以后有其他的方法,再加入其中。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)