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 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么