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无用
悬赏问题
- ¥15 PADS Logic 原理图
- ¥15 PADS Logic 图标
- ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
- ¥20 气象站点数据求取中~
- ¥15 如何获取APP内弹出的网址链接
- ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
- ¥50 STM32单片机传感器读取错误
- ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
- ¥15 机器人轨迹规划相关问题
- ¥15 word样式右侧翻页键消失