[Tech] Domanda di C

Valerio Montagnani tech@vmontagnani.it
Mer 26 Maggio 2004 16:01:59 CEST


Ciao a tutti.


Devo amplificare dei valori acquisiti da un microfono secondo la specifica Little Endian di intel.
I dati Little Endian misciano i bit nel seguente modo: supponiamo di avere un dato unsigned char (8bit).
Sia il valore da rappresentare il numero: 84
in binario il numero 128 è 10000000; secondo LE (Little Endian) 84 si rappresenta così: 0100 0101, cioè i bit meno significativi del numero da rappresentare, stanno nella parte alta del registro della memoria.
Per amplificare il numero ho pensato di disassemblare il registro in due variabili: left = 0100 e right = 0101 e quindi shiftare i bit verso sinistra, per esempio di 4 posizioni (all'atto pratico questo significa moltiplicare per 16 il valore 0100 e 0101 separatamente).
Il risultato ottenuto è effettivamente quello voluto: 01000000 01010000. Per rappresentare questi ultimi numeri ho usato due variabili di tipo int.

Il problema arriva ora: come faccio a rappresentare il numero correttamente amplificato in una variabile sola di tipo int secondo le specifiche LE?
In altre parole come creo la sequenza 16 (01000000) 80 (01010000) in un solo intero?

Spero di essere stato chiaro, grazie, Vale

-- 
Valerio Montagnani        (Lug-Account)        <tech@vmontagnani.it>
              pub 1024/C7E4BC57    sub 2048g/0E170155
Key fingerprint = D5A4 EDFC 060C 5BD6 E2DD  8252 3B67 C1EB C7E4 BC57



Maggiori informazioni sulla lista flug-tech