I: [Tech] Domanda di C

Andrea Benelli andrea.benelli@consilium.it
Mer 26 Maggio 2004 16:07:07 CEST


On Wed, 26 May 2004 15:59:32 +0200
"Mailadmin" <alessio@localhost.localdomain> wrote:

> 
> 
> -----Messaggio originale-----
> Da: tech-bounces@firenze.linux.it
> [mailto:tech-bounces@firenze.linux.it]Per conto di Valerio Montagnani
> Inviato: mercoledì 26 maggio 2004 16.02
> A: FLug-Tech
> Oggetto: [Tech] Domanda di C
> 
> 
> 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
> _______________________________________________
> FLUG - Discussioni tecniche - tech@firenze.linux.it
> URL: http://lists.firenze.linux.it/mailman/listinfo/tech
> Archivio: http://lists.firenze.linux.it/pipermail/tech
> Ricerca nell'archivio: http://www.firenze.linux.it/search

a = 16 (01000000)
b = 80 (01010000)
c = (a << 8) + b;

ciao, Andrea.

-- 
Benelli Andrea
Senior Project Engineer
R&D Department
Consilium Selesmar S.r.l.
Via Romita 26 Montagnana V.P.
I-50020 Florence (Italy)
Tel. +39 0571 681272 (dir.)
Fax. +39 0571 670798



Maggiori informazioni sulla lista flug-tech