Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Conversione da esadecimale ad ascii

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto UtenteMassimoB, Foto Utentefairyvilje

0
voti

[1] Conversione da esadecimale ad ascii

Messaggioda Foto UtenteShika93 » 21 nov 2015, 1:06

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.
Avatar utente
Foto UtenteShika93
282 1 5 7
Expert
Expert
 
Messaggi: 829
Iscritto il: 30 dic 2013, 21:28

1
voti

[2] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteIlGuru » 21 nov 2015, 1:19

Con un linguaggio in particolare o cerchi un algoritmo generale?
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.129 1 10 13
Master
Master
 
Messaggi: 1363
Iscritto il: 31 lug 2015, 23:32

1
voti

[3] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteCandy » 21 nov 2015, 1:42

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:

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);
Avatar utente
Foto UtenteCandy
32,4k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10138
Iscritto il: 14 giu 2010, 22:54

0
voti

[4] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteShika93 » 21 nov 2015, 1:48

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.
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.
Avatar utente
Foto UtenteShika93
282 1 5 7
Expert
Expert
 
Messaggi: 829
Iscritto il: 30 dic 2013, 21:28

0
voti

[5] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteIlGuru » 21 nov 2015, 2:53

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
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.129 1 10 13
Master
Master
 
Messaggi: 1363
Iscritto il: 31 lug 2015, 23:32

1
voti

[6] Re: Conversione da esadecimale ad ascii

Messaggioda Foto Utentesimo85 » 21 nov 2015, 3:11

Foto UtenteShika93 non hai specificato l'architettura e SO con cui programmi.
Sei tu che programmi per architettura MIPS?
Avatar utente
Foto Utentesimo85
30,8k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9930
Iscritto il: 30 ago 2010, 4:59

0
voti

[7] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteIsidoroKZ » 21 nov 2015, 8:50

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
Avatar utente
Foto UtenteIsidoroKZ
103,9k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 18466
Iscritto il: 17 ott 2009, 0:00

0
voti

[8] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteIlGuru » 21 nov 2015, 11:22

Scusate, nel titolo diceva esadecimale
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.129 1 10 13
Master
Master
 
Messaggi: 1363
Iscritto il: 31 lug 2015, 23:32

0
voti

[9] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteShika93 » 21 nov 2015, 11:37

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 Foto UtenteIlGuru 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
Avatar utente
Foto UtenteShika93
282 1 5 7
Expert
Expert
 
Messaggi: 829
Iscritto il: 30 dic 2013, 21:28

0
voti

[10] Re: Conversione da esadecimale ad ascii

Messaggioda Foto UtenteIlGuru » 21 nov 2015, 12:04

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.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.129 1 10 13
Master
Master
 
Messaggi: 1363
Iscritto il: 31 lug 2015, 23:32

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti