Decode a part of a buffer into a scalar
BufDec( const buf[], offset, method )
This command will decode a portion of a buffer into a scalar variable.
buf | Data buffer |
offset | Byte offset into the buffer where to start the decoding |
method | What type of value is encoded in the buffer |
Available methods:
Method | Length | Type | Description |
---|---|---|---|
BT_INT8 | 8 bit | signed integer | Single octet value |
BT_UINT8 | 8 bit | unsigned integer | Single octet value |
BT_INT16 | 16 bit | signed integer | Big endian integer |
BT_UINT16 | 16 bit | unsigned integer | Big endian integer |
BT_INT32 | 32 bit | signed integer | Big endian integer |
BT_UINT32 | 32 bit | unsigned integer | Big endian integer |
BT_INT32LE | 32 bit | signed integer | Little endian integer |
BT_UINT32LE | 32 bit | unsigned integer | Little endian integer |
BT_INT32BLE | 32 bit | signed integer | Big-Little endian integer |
BT_UINT32BLE | 32 bit | unsigned integer | Big-Little endian integer |
BT_INT32LBE | 32 bit | signed integer | Little-Big endian integer |
BT_UINT32LBE | 32 bit | unsigned integer | Little-Bit endian integer |
BT_FLOAT | 32 bit | float | IEEE 732 floating point |
BT_FLOATLE | 32 bit | float | IEEE 732 floating point little endian |
BT_FLOAT64 | 64 bit | float64 | IEEE 732 64-bit floating point (converts to 32 bit float) |
BT_FLOAT64LE | 64 bit | float64 | IEEE 732 64-bit floating point little endian (converts to 32 bit float) |
Also available for decoding bitmaps:
Bit offset : BT_BITOFS0 through BT_BITOFS15
Bit mask : BT_BITMASK1 through BT_BITMASK8
The BT_BITOFSx and BT_BITMASKx methods can be OR:ed together for bitmask decoding.
Example: To extract a 3 bit value from bit position 5,6 and 7, use BT_BITOFS5 | BT_BITMASK3
Returns the decoded value
Note that the returned value is always a 32 bit cell (signed 32 bit integer or 32 bit float).
new x; new s{10}; if(ModbusRead(5, MB_HOLDING, 100, 2, s) == 4) { // Request and receive two registers (32 bits total) x = BufDec(s, 0, BT_INT32); // Decode the received data as a 32 bit integer // ..further processing }