C# UDP接收到的16进制数据,其中,有2字节如 “44 81”,它表示的含义是负的温度,这个两个字节如何转成负数放在Text上显示呢?
1条回答 默认 最新
- wanghui0380 2022-10-19 17:40关注
别问我们我们不知道,你需要问发给你的那个人。
因为底层C/C++从来就不喜欢用asc码,标准float,long字节,int32这样弄,他们是强迫症的,嫌这样的东西浪费字节的
下面我给个尝试猜测代码,请注意注释部分using System.Text; byte[] buffer = new Byte[] { 0x44, 0x81 }; //2字节能代表的东西,常规领域只能是Asc码,short,ushort //你说可以是负数,那么可能的选择只能是1,2类型,但是short只能代表整型,无法表示浮点(小数) //温度通常是小数,所以发给你这东西的人,有可能根据精度*10 或者*100了 short i = System.Buffers.Binary.BinaryPrimitives.ReadInt16LittleEndian(buffer); //这样出来是-32444,很明显这不是温度范围,大概除以1000,勉强到-32.444 //在看看asc码的 string s = Encoding.ASCII.GetString(buffer);//出来是D?,很明显不是温度 //如果我们看ushort呢?ushort他是正数,那么底层C++那波从来纠结字节的人怎么弄 //他们按情况玩的,比如温度传感器最低测量温度是-40,那么-39.999+40 不就成了0.001成正数了,然后在乘以1000就是1了 //所以这个东西对于C++那波强迫症的也有可能是下面这样 ushort i1 = System.Buffers.Binary.BinaryPrimitives.ReadUInt16BigEndian(buffer); var i2 = i1 / 1000f - 40f;//结果是-22.463 //所以总体上你别问我们,需要问那个发给你人 //需要问清楚他按大端字节序列传,还是小端字节序 //需要问清楚,他的编码计算规则是啥
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改