C#上位机和下位机通讯协议上有关数制转换问题,望大家不吝赐教

theorynice 2017-09-23 10:08:52
通讯协议:原始数据为浮点数,且数值范围各不相同,为了方便下位机处理数据,故要原始数据转化为整型数(范围是0~1023)再发送,转化的方法即是以一个比例系数K对原始数据整体进行缩小或放大,然后取整,使转化后的数据满足范围要求。转化后数据发送时统一以16进制,16位发送,如256应发送0100H, 255应发送0010H,小于256的数高8位的0不能省略

我的疑惑:1)浮点数转换成小数后,数据不失真吗?
2)serial port 传输数据时自动转为byte形式传输?协议里的十六进制和byte有什么联系?
3)我需要将数据转换成十六进制(字符串形式),再将16进制格式的string 转成byte[],例如, "ae00cf"转换成0xae00cf,然后用serialport。write(byte【】)吗?
恳请大家解答
...全文
301 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxyzjm62 2017-09-23
  • 打赏
  • 举报
回复
理解通讯协议的本质后,你的疑惑就没有了。
kxyzjm62 2017-09-23
  • 打赏
  • 举报
回复
通讯协议是什么?是发送方和接收方之间的一种约定或机制。也就是中国人之间对话用标准话,各省的人之间对话用方言。发送方和接收方只要都遵从这个协议,接收方就能理解(解释)收到的数据。理解通讯协议的本质后,你的一伙子人就没有了。
theorynice 2017-09-23
  • 打赏
  • 举报
回复
谢谢大家解答!
  • 打赏
  • 举报
回复
对于问题3,我还是建议你从各种编程入门教程上学习。不要如蜻蜓点水一般地上csdn,上 csdn 对你来说并不好。你如果认真学2个教程下来,将原理部分正正式式地如学生应付考试一样去学习,必定会自己在网络上找到语法。
  • 打赏
  • 举报
回复
引用 楼主 theorynice 的回复:
我的疑惑:1)浮点数转换成小数后,数据不失真吗? 2)serial port 传输数据时自动转为byte形式传输?协议里的十六进制和byte有什么联系? 3)我需要将数据转换成十六进制(字符串形式),再将16进制格式的string 转成byte[],例如, "ae00cf"转换成0xae00cf,然后用serialport。write(byte【】)吗? 恳请大家解答
1. 人家是从业务意义上说的小数点后一定位的小数,例如 12.2人家可能要求发送为122。你所谓的“失真”,如果让你说出“失真多少?对用户使用来说值几毛钱关系?”你能计算出来吗? 2. 十六进制跟byte名词儿的关系,建议学一下计算机原理。数字的二进制表示、8进制表示、16进制表示、byte、word 等等基本概念。数字原理不仅仅是计算机相关专业学,许多理工科都学。不学不行啊,计算机(计算器)的数据表示概念都不理解了。
ilikeff8 2017-09-23
  • 打赏
  • 举报
回复
1 你这个浮点数应该是有精度和长度限制的,例如2.35 K=100,整数化后就是235,传过去再根据K转回2.35的意思 2,3 serial port 本身就是按字节发送 , 如256应发送0100H, 255应发送0010H, 这话如果是说直接发字节,那就是256发送2个字节,0x01 0x00, 你这255应发送0010H 是怎么得出来的,0x0010是16,高低换位 0x1000是4096 如果是发送BCD码,百度BCD码

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧