PDA

Visualizza la versione completa : [C++] big e little endian con i float


warcomeb
16-01-2009, 23:56
salve a tutti, ho dei problemi con la conversione di un float in big endian e nel salvataggio in un file binario.
Quello che mi succede e che io faccio la conversione di un float in big endian con questa funzione:


...
Swap32((long *)&Swp2);
fwrite (Swp2, sizeof (float), 1, pf_out);


...
void Swap32 ( long* Long )

{
*Long = ((*Long&0x000000ffL)<<24 )|

((*Long&0x0000ff00L)<<8 )|

((*Long&0x00ff0000L)>>8 )|

((*Long&0xff000000L)>>24 );

}



dove Swp2 Ŕ un float. Quando lo vado a leggere dal file binario il float questo Ŕ little endian!!

dove sbaglio??
grazie

Marco

warcomeb
20-01-2009, 08:52
nessuno sa darmi una mano... per favore!!!!

help me!

grazie

Marco

oregon
20-01-2009, 13:49
Intanto deve essere

fwrite (&Swp2, sizeof (float), 1, pf_out);

come per la fread ...

Per il resto non vedo il problema ...

warcomeb
20-01-2009, 14:48
l'& c'era... perdonami!!! anche io non vedo il problema!!! help me!!


grazie


Marco

oregon
20-01-2009, 17:32
Ma non vedo il problema significa che a me funziona ...

Mostra tutto il codice e fammi capire da un esempio ...

warcomeb
20-01-2009, 17:40
allora... ecco il codice. Sto utilizzando il SystemC che Ŕ una libreria scritta in C++


void Htk_format_sc::WriteHTKFeature ()
{
short i=0;
float Swp[NUM_CEP]; // Vettore di appoggio
float Swp2;
PORTA_P_Mfcc Cep;

while ( true )
{
// lettura dalla fifo dei dati
Cep = p_in_Mfcc.read();
// Si esegue riordinano i coefficienti cepstrali
// infatti C0 deve essere Cep[12]
Swp2 = Cep.Mfcc[0];
Swap32((long *)&Swp2);
Swp[NUM_CEP-1]=Swp2;

for (i = 0; i < NUM_CEP - 1; i++)
{
Swp2 = Cep.Mfcc[i+1];
Swap32((long *)&Swp2);
Swp[i]=Swp2;
}

fwrite (Swp, sizeof (float), NUM_CEP, pf_out);
OutHeader.nSamples++; // Incremento del numero di blocchi
}
}

dove ovviamente la funzione Swap32 Ŕ quella che ho postato per prima!!

Grazie

Marco

warcomeb
21-01-2009, 11:23
dato che sono giorni che mi sto accervellando per risolvere questo enigma... qualcuno ha una soluzione alternativa alla mia da farmi provare?!?!?! :dh˛:

grazie


MArco :cry:

oregon
21-01-2009, 11:30
Guarda ... ho provato un codice semplice con la funzione (che e' corretta) scrivendo e leggendo da file e funziona tutto correttamente.

Non ho la libreria di cui parli (SystemC) e quindi non posso provare direttamente il tuo codice, ma il problema, sicuramente non sta nella Swap32 ...

warcomeb
21-01-2009, 11:33
ti ringrazio per la disponibilitÓ e la pazienza!!!

Marco

Loading