Newsgroup: it.comp.lang.c
Titolo: conversione binario ascii

non riesco a trovare un algoritmo per convertire un numero espresso
in binario nella codifica ascii delle sue cifre in decimale
(es. da 00001101 voglio ottenere le codifiche ascii di 1 e di 3).
qualcuno conosce l'algoritmo per ottenere almeno le singole cifre? poi
passare al loro codice ascii e' facile. SENZA PERO' UTILIZZARE LA
MOLTIPLICAZIONE E LA DIVISIONE!! (mi serve per programmare un
microcontrollore che non le sa fare)
grazie emiliano.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 grazie emiliano.
Scusa, ma quando tu dici che il numero ce l'hai in binario
intendi dire che hai un array di 8 valori interi 0 0 0 1 1 etc.etc.
o smeplicemente che hai una variabile che contiene il numero
che ti interessa e che quindi (internamente) e' naturalmente
in binario ?
Se questo secondo e' il tuo problema, in pratica tu cerchi un metodo
per covertire un unsigned char in tre valori numerici (la cifra delle
centinaia, delle decine e delle unita' che poi potrai convertire
nel valore ASCII aggiungendo alla cifra in decimale il valore ascii di 
'0' (zero).
Allora dato un byte che contiene il numero 124 tu vuoi ottere 1 2 e 4
senza usare divisione e moltiplicazione.
Allora puoi fare (metodo scemo!):
decine=0; unita=0; centinaia=0;
while (N>100) { centinaia++; N-=100;}
while (N>10) {decine++; N-=10;}
unita = N;
fine. (stando opportunamente attenti ai problemi di segno del char,etc.etc)
se invece il numero l'avevi in un array di 8 valori 0 o 1, tipo
unsigned char b[8];
allora prima lo puoi convertire in un unico numero N piu' o meno
come segue e poi applichi il metodo sopra.
for (p=1, N=i=0; i<8; i++, p<<=1)  /* o p=p+p */
   if (b[i]) N+=p;
(naturalmenente questo ciclo cambia a seconda dell'ordine
dei bit significativi).
ciao,
g.

   if (b[i]) N+=p;
oops. Magari e' piu semplice qualcosa del tipo:
for (N=i=0; i<8; i++) N |= b[i]<<i;
comunque non avendo mai programmato micro non so
esattamente quali strumenti hai a disposizione.
Che linguaggio usi ?
ciao,
g.

 grazie emiliano.
Il numero "binario" e' sotto forma di stringa di caratteri '1' e '0' oppure
una variabile normalissima ??!
Se e' il secondo caso bastava dire ho una variabile che contiene il valore
13, come faccio a converrtirlo in stringa?!?
La risposta e' farti tu una semplice funzione oppure usare una gia' fatta!
sprintf(stringa,"%d",&var);
E' solo una delle tante possibilita'!
Se e' sotto forma di stringa potresti leggere un carattere alla volta e
usando maschere di bits cambiare i bits di una vera variabile (init a 0) in
corrispondenza degli 1 della stringa. Dopo segui il primo procedimento per
avere una stringa oppure se ti interessa un int gia' lo hai!
Una domanda.....  Siamo su di un NG di C. Il C prevede moltiplicazione e
divisione, come e' possibile usare il C su di un microcontrollore che non le
sa fare..... le convertira' in operazioni piu' meno complesse al limite, ma
in qualche modo le deve fare se supporta il C, boh...
Tommy

 sprintf(stringa,"%d",&var);
ovviamente.... ho scritto in fretta.... & non e' che ci stia molto bene ad
esempio ;-)
inoltre assicurati che stringa sia abbastanza ampia o limitane il campo...
Tommy