byte数组变量转int变量
缘起:modbus传输数据,从下位机传来的数据存储在byte数组里面,转意存储在具体变量中时,需要对应位置。
c#中有对应的指令,示例代码如下:
How to convert a byte array to an int - C# | Microsoft Learn
byte[] bytes = [0, 0, 0, 25];
if (BitConverter.IsLittleEndian) Array.Reverse(bytes);
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine($"int: {i}"); // Output: int: 25
试了一下,我去,第一行就错了,要用大花括号,巨硬,你们闹啥呢?
中间那个掉个的函数,有输出的是25,没有输出的就是419430400(0x19000000),十进制的25,还要转换成十六进制的0x19,才看懂了,行,你们真厉害。
回头来看modbus的实现,基本语句就是特定地址参数的读写,但是不知道为什么,下位机的写法也是各显神通,由于地址对应的是16bit,也就是两个字节,操作4字节时,byte数组顺序,有给搞成花式变化的,比如四个字节{1,2,3,4},你猜是什么?对应int是0x03040102,也就是前面两个字节是高在前,低在后,组成一个参数地址后,低地址在前,高地址在后。开发者不觉得晕吗?
照这个写法,还不如直接弄个四字节数组,来回自己折腾呢。捋顺了再转意出变量。
各个厂家的开发人员自己定义的变量方式还是和具体厂家确认好吧
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/246331.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!