OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11998|回复: 8

关于在开发板上格式化输出16进制数组的问题

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-1-3
在线时间
0 小时
发表于 2011-1-3 00:30:19 | 显示全部楼层 |阅读模式
目前在使用坛主的开发板写点小程序,顺便学习一下STM32,因为通讯协议的需要通过串口输出定格式数据,见代码如下:
u8  SendBuffer[8];  u8 SendCount;   
 for (SendCount = 0; SendCount<8; SendCount++) {printf("%02x", SendBuffer[SendCount]);} 

SendBuffer内数据为:02,00,00,00,00,00,24,03
如何能保证PC端串口接收到数据为:0200000000002403呢?我试了多种printf参数最接近的就是如上代码所诉,可是还是达不到要求输出为200000000002403,盼望有高人指点。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-1-3 00:39:14 | 显示全部楼层
你这个代码,应该就是对的了。可以得到 0200000000002403的结果。
但是如果不行的话,建议你就在上位机做处理吧,这东西,软件上很好解决的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-1-3
在线时间
0 小时
 楼主| 发表于 2011-1-3 00:46:58 | 显示全部楼层
而且依上情况显示的也是ASCII模式显示的,如果我要求实际以HEX显示则更困难了。以HEX显示则为:32 30 30 30 30……
回复 支持 反对

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-1-3
在线时间
0 小时
 楼主| 发表于 2011-1-3 00:48:10 | 显示全部楼层
 软件中不一定好处理,因为第一位不是一定为02的。
回复 支持 反对

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-1-3
在线时间
0 小时
 楼主| 发表于 2011-1-3 01:41:04 | 显示全部楼层
回复【4楼】z1234:
-------------------------------
用了个比较变态的方法解决了问题,等有空了再好好研究一下。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-1-3 09:23:48 | 显示全部楼层
呵呵,解决了就好。
这种一般自己写个协议,问题应该不大。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2010-12-23
在线时间
7 小时
发表于 2011-1-3 18:34:27 | 显示全部楼层
1. 如果只判断首字节的前导0,只要判断SendBuffer[0]是否>0x0f,下面的这段就行了,
2. 如果去除整个数组所有的前导0,增加1个变量,从第1个不为0的数组开始就行了

                for (SendCount = 0; SendCount<8; SendCount++) 
{  
     if(SendCount)
       printf("%02x", SendBuffer[SendCount]);
 else
   if(SendBuffer[SendCount]>0x0f)
         printf("%02x", SendBuffer[SendCount]);
   else
 printf("%1x", SendBuffer[SendCount]);
   


回复 支持 反对

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-1-3
在线时间
0 小时
 楼主| 发表于 2011-1-4 13:37:01 | 显示全部楼层
回复【7楼】slnet:
-------------------------------
非常感谢这是个窍门,我就是用了这个方法。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2019-7-17
在线时间
42 小时
发表于 2020-1-13 16:16:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 19:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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