BufDec

Decode a part of a buffer into a scalar

Description

BufDec( const buf[], offset, method )

This command will decode a portion of a buffer into a scalar variable.

Parameters

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

Return value

Returns the decoded value

Note that the returned value is always a 32 bit cell (signed 32 bit integer or 32 bit float).

Example usage

    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        
    }