Need advice on serial bytes reading optimization
In principle it is ok to use your way, but a simple improvement is to change the magic numbers (38, 39) to constants or define:

const int offset_heat = 38;

…

float Heat = (float)data[offset_heat];


or a define:

#define OFFSET_HEAT 38

…

float Heat = (float)data[OFFSET_HEAT];


If all values are consecutive you can keep a variable to read the values:

int offset = 38; // Normally starts at 0 assuming you read values from the start

float heat = (float) readByte(&amp;offset);

…

int readByte(uint8_t* offset)
{
    int value = data[*offset];
    (*offset)++;
    return value;
}


This increases the offset after reading the value.

Some remarks:


It's a convention not to use capitals for local variables (so change Heat to heat)
You don't use the Heat variable in sprintf, maybe this is intentional.