Come convertire l'array di byte (4 byte) in float? [chiuso]

-2

Un pezzo di codice che sto cercando di eseguire il debug ha generato una sequenza di 4 byte da un numero float noto. Sto cercando di verificare il numero float dato i quattro byte.

Il (noto) float 8.03 ha generato i byte 56,46,48,51 (qui è elencato in base a come è stato ricevuto in un buffer, cioè 56 prima, poi 46, poi 48, poi 51). Ma mi piacerebbe sapere se 56-46-48-51 (MSbyte to LSbyte) o 51-48-46-56 rappresenta 8.03 (se lo fa, per niente).

Non sono sicuro di come scrivere codice per verificare entrambi i casi. Qualcuno può offrire un suggerimento?

    
posta Minh Tran 30.11.2015 - 11:02
fonte

1 risposta

5

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.

    
risposta data 30.11.2015 - 11:22
fonte

Leggi altre domande sui tag