将两个 16 位寄存器转换为 32 位实值 flutter

Convert two 16 Bit Registers to 32 Bit real value flutter

我正在使用 Modbus flutter 库,读取我获得的 2 个寄存器:

[22136, 4660]

这意味着:0x12345678 我需要一个函数将其转换为 32 位实际值:305419896,在我发现的 easymodbustcp 库中:

/**
        * Convert two 16 Bit Registers to 32 Bit real value
        * @param        registers   16 Bit Registers
        * @return       32 bit real value
        */
    public static float ConvertRegistersToFloat(int[] registers) throws IllegalArgumentException
    {
        if (registers.length != 2)
            throw new IllegalArgumentException("Input Array length invalid");
        int highRegister = registers[1];
        int lowRegister = registers[0];
        byte[] highRegisterBytes = toByteArray(highRegister);
        byte[] lowRegisterBytes = toByteArray(lowRegister);
        byte[] floatBytes = {
                                highRegisterBytes[1],
                                highRegisterBytes[0],
                                lowRegisterBytes[1],
                                lowRegisterBytes[0]
                            };
        return ByteBuffer.wrap(floatBytes).getFloat();
    }  

在 flutter / dart 中有什么帮助吗?

这可以通过移位和按位 or 来完成。您需要将 2 个高位字节移动 16 位,然后 or 得到您想要的值。

void main() {
  List<int> vals = [22136, 4660];
  
  int result = vals[1] << 16 | vals[0];
  print(result);//305419896
}

在这种情况下,您也可以通过将按位 or 替换为加法来获得相同的结果。

void main() {
  List<int> vals = [22136, 4660];
  
  int result = (vals[1] << 16) + vals[0];
  print(result);//305419896
}