Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] big e little endian con i float

    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:
    codice:
    ...
    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 - IL LEADER O.O.O.

  2. #2
    nessuno sa darmi una mano... per favore!!!!

    help me!

    grazie

    Marco
    warcomeb - IL LEADER O.O.O.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Intanto deve essere

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

    come per la fread ...

    Per il resto non vedo il problema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    l'& c'era... perdonami!!! anche io non vedo il problema!!! help me!!


    grazie


    Marco
    warcomeb - IL LEADER O.O.O.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ma non vedo il problema significa che a me funziona ...

    Mostra tutto il codice e fammi capire da un esempio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    allora... ecco il codice. Sto utilizzando il SystemC che è una libreria scritta in C++
    codice:
    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 - IL LEADER O.O.O.

  7. #7
    dato che sono giorni che mi sto accervellando per risolvere questo enigma... qualcuno ha una soluzione alternativa alla mia da farmi provare?!?!?!

    grazie


    MArco
    warcomeb - IL LEADER O.O.O.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    ti ringrazio per la disponibilità e la pazienza!!!

    Marco
    warcomeb - IL LEADER O.O.O.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.