免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10392 | 回复: 6
打印 上一主题 下一主题

linux串口接收16进制数据并打印16进制数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-28 20:30 |只看该作者 |倒序浏览
大家好,我请教一个问题
我现在写了一个linux下串口的接收程序,把接收的数据打印出来
现在的情况是如果发送过来的是字符串,可以正常打印。但是如果是按照16进制发送过来,就不能打印了。
请问怎么才能打印16进制的数据啊?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2012-02-28 20:40 |只看该作者
这里的打印是什么意思?
printf吗?

论坛徽章:
0
3 [报告]
发表于 2012-02-28 21:21 |只看该作者
是啊,或者说,比如一个数组里存放了一些16进制数,怎么把打印出来?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
4 [报告]
发表于 2012-02-28 22:20 |只看该作者
如果不是可打印的字符串,而是二进制字节流
一般的显示方式就是转换为可读十六进制

假设const char* p指向某个字节
用snprintf(buf, sizeof(buf), "%02X", (unsigned char)*p)格式化之

至于怎么封装,就自己的爱好了

论坛徽章:
0
5 [报告]
发表于 2012-02-28 22:33 |只看该作者
嗯嗯,谢谢

论坛徽章:
0
6 [报告]
发表于 2012-05-22 23:57 |只看该作者
本帖最后由 gdutllf2006 于 2012-05-22 23:57 编辑

楼主,能共享下你的解决方法吗?我同样遇到这个问题,没明白如何解决。

unsigned char buffer[8];
while(1){
                  while((nread = read(fd,buffer,8 ))>0){ /*从串口读取16进制字节*/
                          buffer[nread]=0;
                              printf("buffer is %s\n", buffer);
                        
                  }
}
如果从串口发过来的16进抽数据是可打印的,则没问题
如果是不可打印的,如发上来的是“0xFF 0xFF”,则出现乱码。我希望的是把它就当作字符串"0xFF 0xFF"来处理

论坛徽章:
0
7 [报告]
发表于 2012-05-23 18:42 |只看该作者
我的问题和你貌似不大一样的。。我没有出现乱码,估计是你串口设置上的问题
至于丢失,我在发送和接收之间加入了延时
sleep(1);
就没有出现数据丢失的情况了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP