将两个 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
}
我正在使用 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
}