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,也就是前面两个字节是高在前,低在后,组成一个参数地址后,低地址在前,高地址在后。开发者不觉得晕吗?
照这个写法,还不如直接弄个四字节数组,来回自己折腾呢。捋顺了再转意出变量。
各个厂家的开发人员自己定义的变量方式还是和具体厂家确认好吧