免费注册 查看新帖 |

Chinaunix

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

[C] modbus通讯问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-16 14:10 |只看该作者 |倒序浏览
unsigned char send[8] = { 0x01, 0x03, 0x0C, 0xCA, 0x00, 0x06, 0xE6, 0xA6 };
write(fd, send, ;

int buf_len = 5 + 6 * 2;
unsigned char buffer[buf_len];
bzero(buffer, buf_len);

usleep(200000);
read(fd, buffer, buf_len);

int i;
for (i = 0; i < buf_len; i++)
{
    printf("%02X", buffer[i]);
}
printf("\n";

为什么读到的数据buffer中,大于0x80的,都被减去了0x80,
实际数据应该是: 0x01 0x03 0x0C 0x12 0x34 0x45 0x67 0x89 0xAB ..
实际printf出来的buffer数据是:0x01 0x03 0x0C 0x12 0x34 0x56 0x78 0x09 0x2B

这是为什么,怎么样才读到正确数据?

论坛徽章:
5
2015年迎新春徽章
日期:2015-03-04 09:58:1115-16赛季CBA联赛之上海
日期:2016-01-18 13:24:3015-16赛季CBA联赛之佛山
日期:2016-01-27 10:13:0515-16赛季CBA联赛之北控
日期:2016-08-04 22:33:2115-16赛季CBA联赛之山西
日期:2016-08-06 15:49:33
2 [报告]
发表于 2013-09-16 14:54 |只看该作者

为什么读到的数据buffer中,大于0x80的,都被减去了0x80,
实际数据应该是: 0x01 0x03 0x0C 0x12 0x34 0x45 0x67 0x89 0xAB ..
实际printf出来的buffer数据是:0x01 0x03 0x0C 0x12 0x34 0x56 0x78 0x09 0x2B


从这看不出来啊亲?你下面是为了说明上面的?

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
3 [报告]
发表于 2013-09-17 19:42 |只看该作者
0x80正好是Char类型的最高位,也就是符号位。试试带符号的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP