При таком заполнении flоat-переменной
Код
union { float fVal; unsigned char bytes[4]; } value;
value.bytes[0] = data[4];
value.bytes[1] = data[3];
value.bytes[2] = data[6];
value.bytes[3] = data[5];
может оказаться, что вы записали в него "нечисло". Т.к. далеко не любая комбинация битов является валидным значением float.
А бедняга printf начинает конверировать инвалидное число в десятичное и сходит с ума

.
Мой совет: ... потренируйтесь на нулях