怎么把一串uchar型数据转化为16进制数发送?

2019-03-24 10:38发布

原本打算发送  7E 01 01 00 01 01 04 0D
原来程序是:
调用:SendString_PH_START("7E 01 01 00 01 01 04 0D");
定义:
void SendString_PH_START(uchar *ptr)
{      
      for(int j=0;j<24;j++)
      {
        while (!(IFG2 & UTXIFG1));              
        TXBUF1 = *ptr++;                     
      }
      while (!(IFG2 & UTXIFG1));
      TXBUF1 = ' ';//回车
}

后来串口调试发现其实要点击“以十六进制数发送”才可以。
那我这样改对不对?貌似没反应啊。。。。
SendString_PH_START("0x7E 0x01 0x01 0x00 0x01 0x01 0x04 0x0D");
void SendString_PH_START(uchar *ptr)
{      
      for(int j=0;j<40;j++)
      {
        while (!(IFG2 & UTXIFG1));              
        TXBUF1 = *ptr++;                     
      }
      while (!(IFG2 & UTXIFG1));
      TXBUF1 = ' ';//回车
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
ljj3166
1楼-- · 2019-03-25 14:06
标准c的atoi函数可以吗?再用printf输出打印
qiushenghua
2楼-- · 2019-03-25 16:54
 精彩回答 2  元偷偷看……
面纱如雾
3楼-- · 2019-03-25 18:00
qiushenghua 发表于 2014-12-18 13:37
楼主去补一补C语言吧~~
双引号“”标注的内容为字符串,单引号''标注的内容为字符
你要发送的其实是字符的ASCII码,也就是直接发送8位的数值(不用管它显示成什么)
0xMM(其中MM是16进制数)表示一个8位的字符,也就是一个字节的数据。用串口助手“以十六进制发送”的其实就是这里面的MM,其中不同的字节用空格隔开。但是在C语言中,一个MM表示一个字节,多个MM就需要用多个字符型的变量储存,定义数组就是这个原因。数组的不同元素之间需要用逗号隔开,所以这里用逗号而不是空格。使用空格的话,会造成编译错误。

谢谢你!我的基础确实不扎实!等考完六级一定重新学一遍C!
面纱如雾
4楼-- · 2019-03-25 21:43
armcu 发表于 2014-12-18 11:34
发送数据长度啊

大神,我程序中之前都是把数据当做字符来处理的,后来发现其实这些都是十六进制数,我这段程序:
44.jpg
本以为RXBUF1接收到的都是字符 '7'  'E' 之类的字符,其实是十六进制数 0x7E,但是我后面的程序和计算都是以字符为依据,我想我红 {MOD}框里标出来的程序能不能更改一下,先把RXBUF1接收到的十六进制数处理成字符再赋给ptr485[]行不行?
我想下面这样改,我知道我这样不对,您能不能指点一下?
比如RXBUF1接收到的是0x7E
ptr485[rxcount++] = RXBUF1/16;   //这边得到7   ?????
ptr485[rxcount++] = RXBUF1%16;//这边得到E   ?????


armcu
5楼-- · 2019-03-25 22:35
 精彩回答 2  元偷偷看……
armcu
6楼-- · 2019-03-26 02:10
面纱如雾 发表于 2014-12-18 14:05
大神,我程序中之前都是把数据当做字符来处理的,后来发现其实这些都是十六进制数,我这段程序:

本以为RXBUF1接收到的都是字符 '7'  'E' 之类的字符,其实是十六进制数 0x7E,但是我后面的程序和计算都是以字符为依据,我想我红 {MOD}框里标出来的程序能不能更改一下,先把RXBUF1接收到的十六进制数处理成字符再赋给ptr485[]行不行?
我想下面这样改,我知道我这样不对,您能不能指点一下?
比如RXBUF1接收到的是0x7E
ptr485[rxcount++] = RXBUF1/16;   //这边得到7   ?????
ptr485[rxcount++] = RXBUF1%16;//这边得到E   ?????

你可以把接收到的数据转换成BCD字符,然后在进行处理。

一周热门 更多>

相关问题

    相关文章