Ho bisogno di convertire un numero esadecimale, nello stesso numero in ascii.
Per esempio: se ho 2d esadecimale (45 decimale) voglio che diventi 0x3435 dove appunto 0x34=4 e 0x35=5.
Come faccio? Non conosco nessun metodo di trasformazione e su internet non trovo niente.
Conversione da esadecimale ad ascii
Moderatori:
Paolino,
fairyvilje
16 messaggi
• Pagina 1 di 2 • 1, 2
1
voti
Se il numero è una variabile numerica, allora il problema non si pone, almeno che non sia una variabile BCD.
Poi, in base al linguaggio che usi, puoi fare uso delle comuni funzioni di formattazione della libreria standard, oppure, se proprio non ne hai la possibilità, ti scrivi un loop che: partendo dalla prima unità peschi in un array di caratteri il corrispondente ASCII, e poi dividi per dieci, ripetendo tutto finché non hai finito tutto il numero.
Esempio di getto:
Poi, in base al linguaggio che usi, puoi fare uso delle comuni funzioni di formattazione della libreria standard, oppure, se proprio non ne hai la possibilità, ti scrivi un loop che: partendo dalla prima unità peschi in un array di caratteri il corrispondente ASCII, e poi dividi per dieci, ripetendo tutto finché non hai finito tutto il numero.
Esempio di getto:
- Codice: Seleziona tutto
iNumber : INT := 45;
sAsciiTable : STRING[16] := '0123456789ABCDEF';
sResult : STRING[16] := '';
iAcc1 : INT;
iAcc2 : INT;
iAcc3 : INT;
iAcc3 := iNumber;
while iAcc3 > 0 do
iAcc2 := iAcc3 MOD 10;
sResult := CONCAT(IN1 := sAsciTable[iAcc2], IN2 := sResult);
iAcc3 := iAcc3 / 10;
end_while;
sResult := CONCAT(IN1 := '0x', IN2 := sResult);
-

Candy
32,5k 7 10 13 - CRU - Account cancellato su Richiesta utente
- Messaggi: 10123
- Iscritto il: 14 giu 2010, 22:54
0
voti
Assembler.
Uso solo esadecimali. Sto però facendo un programma in cui necessito sommare due costanti decimali e (per stamparle a video come stringa di caratteri) devo convertire il risultato in ascii.
Non ho capito.
Sono una capra in programmazione ma purtroppo mi tocca pure questa.
Uso solo esadecimali. Sto però facendo un programma in cui necessito sommare due costanti decimali e (per stamparle a video come stringa di caratteri) devo convertire il risultato in ascii.
Candy ha scritto:ti scrivi un loop che: partendo dalla prima unità peschi in un array di caratteri il corrispondente ASCII, e poi dividi per dieci, ripetendo tutto finché non hai finito tutto il numero.
Non ho capito.
Sono una capra in programmazione ma purtroppo mi tocca pure questa.
0
voti
Riserva un array di 16 byte dove metti i codici ascii dei numeri esadecimali da 0 a 9 e da A ad F.
Poi diciamo che conosci la dimensione in byte della variabile che contiene il numero, es 4 byte.
Prendi il nibble più basso, diciamo che contiene 5,vai a prendere il quinto byte dell' array e lo stampi.
Sposti il cursore davanti al numero stampato.
Shifti a destra il numero di 4 bit, che equivale a dividere per 16
Prendi il nibble più basso e stampi come prima.
Ripeti per gli altri 3 byte del numero
Poi diciamo che conosci la dimensione in byte della variabile che contiene il numero, es 4 byte.
Prendi il nibble più basso, diciamo che contiene 5,vai a prendere il quinto byte dell' array e lo stampi.
Sposti il cursore davanti al numero stampato.
Shifti a destra il numero di 4 bit, che equivale a dividere per 16
Prendi il nibble più basso e stampi come prima.
Ripeti per gli altri 3 byte del numero

0
voti
IlGuru ha scritto:Riserva un array di 16 byte dove metti i codici ascii dei numeri esadecimali da 0 a 9 e da A ad F.
Dall'esempio che fa pare voglia anche convertirlo in decimale.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
Si, mips. Avevo cominciato a fare il programma tempo fa ma poi l'avevo abbandonato lì perché mi stava antipatico.
Io stampo una stringa di caratteri tra cui in mezzo questa costante. Però non posso stampare un byte in mezzo ad una stringa di caratteri, no? Per questo necessito di un modo per convertire il numero hex che ho, nella stesso numero (decimale) ma in ascii.
Nel titolo ho messo esadecimale-ascii perché se voglio stampare 0x41 a schermo, io non vedrei 65 decimale? O mi torna 0x41? perché se è così allora ho cannato il titolo.
La soluzione di
IlGuru mi pare faccia quello che devo, no? Converto il mio valore hex in decimale e ad ogni numero decimale gli associo il corrispondente carattere ascii.
Edit: ho pensato ad una costante in byte e poi convertirla perché avrei potuto inserirla come stringa ascii (decimale), solo che poi avrei dovuto convertirla in esadecimale sommare quello che mi serve e riconvertire in ascii. In questo mi tocca fare due conversioni contro una sola
Io stampo una stringa di caratteri tra cui in mezzo questa costante. Però non posso stampare un byte in mezzo ad una stringa di caratteri, no? Per questo necessito di un modo per convertire il numero hex che ho, nella stesso numero (decimale) ma in ascii.
Nel titolo ho messo esadecimale-ascii perché se voglio stampare 0x41 a schermo, io non vedrei 65 decimale? O mi torna 0x41? perché se è così allora ho cannato il titolo.
La soluzione di
Edit: ho pensato ad una costante in byte e poi convertirla perché avrei potuto inserirla come stringa ascii (decimale), solo che poi avrei dovuto convertirla in esadecimale sommare quello che mi serve e riconvertire in ascii. In questo mi tocca fare due conversioni contro una sola
0
voti
No, quello che ho scritto è un algoritmo per visualizzare il valore di un nunero esadecimale. Quello che devi fare tu in assembler non è semplice, lo sarebbe con un linguaggio di programmazione di livello più alto.
In sostanza devi dividere il numero A per dieci ottenendo un intero B ed il resto R, e stampare il codice corrispondente ad R. Poi applicare lo stesso procedimento a B fino a che non arrivi ad un punto in cui B vale 0.
Dividere per 10 significa contare quante volte 10 sta in un numero, ad esempio sottraendo 10 da una copia di quel numero fino a che il numero resta positivo.
Il programma da scrivere si ridurrebbe molto in dimensioni utilizzando delle funzioni, ma devi sapere come salvare e prelevare i valori dalla pila di sistema prima e dopo le chiamate alle funzioni, insomma un po' più complicato che usare mille cicli.
In sostanza devi dividere il numero A per dieci ottenendo un intero B ed il resto R, e stampare il codice corrispondente ad R. Poi applicare lo stesso procedimento a B fino a che non arrivi ad un punto in cui B vale 0.
Dividere per 10 significa contare quante volte 10 sta in un numero, ad esempio sottraendo 10 da una copia di quel numero fino a che il numero resta positivo.
Il programma da scrivere si ridurrebbe molto in dimensioni utilizzando delle funzioni, ma devi sapere come salvare e prelevare i valori dalla pila di sistema prima e dopo le chiamate alle funzioni, insomma un po' più complicato che usare mille cicli.

16 messaggi
• Pagina 1 di 2 • 1, 2
Chi c’è in linea
Visitano il forum: Nessuno e 26 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




