Sembra che qui ci sia un malinteso principale, perché, citandoti,
The (known) float 8.03 generated the bytes 56,46,48,51
la sequenza 56,46,68,51 è 8,03 in testo (ASCII), ma non la rappresentazione binaria secondo gli standard ampiamente utilizzati come IEEE754.
Con IEEE754 binario a 4 byte, 8.03 è rappresentato come 65,0,122,225 (in ordine big-endian) o 225,122,0,65 (in ordine little-endian, come su x86).
Se è veramente la rappresentazione di questo float, quindi
1) Non puoi essere sicuro che ogni float nel testo sia rappresentato in 4 byte, a meno che ciò non sia specificato da alcune specifiche; si prega inoltre di considerare come viene terminato il testo di rappresentazione;
2) I problemi come "MSbyte a LSbyte" non sono solitamente applicabili al testo ASCII nella RAM, poiché il testo è memorizzato quasi sempre che l'offset 0 porta il carattere più a sinistra. Le eccezioni sono troppo rare e devono essere esplicitamente specificate. Ma questo non si applica alla lettura di interi della stessa RAM. Se si legge "8.03" come numero intero, su macchine little-endian come x86 risulta 0x33302e38.
E, rispondendo alla tua domanda di intestazione "Come convertire l'array di byte (4 byte) in float?", la risposta, basata sul tuo esempio, è di chiamare una routine di libreria standard che analizza un modulo di testo. Se è scritto in C, è strtod
o sscanf
, e devi fornire la terminazione NUL dell'array di caratteri di input.