Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Conversione dall'esadecimale

302 views
Skip to first unread message

ciccio

unread,
Oct 27, 2001, 5:43:27 PM10/27/01
to
Scusate, ma non riesco a trovare in VBA la funzione per convertire un numero
esadecimale in decimale, ovvero l'inverso di "Hex".
E' una mia pecca o è una dimenticanza di Bill!?
Grazie per eventuali risposte!

PS:Si accettano consigli su come sopperire ad eventuali mancanze!


Paperino

unread,
Oct 27, 2001, 5:53:21 PM10/27/01
to
"ciccio" ha scritto nel messaggio

> Scusate, ma non riesco a trovare in VBA la funzione per convertire un numero
> esadecimale in decimale, ovvero l'inverso di "Hex".

Chr$("&H" & StringaEsadecimale)

Ma se ti serve il programmino per tradurre i messaggi di Vipera,
ti mando direttamente il sorgente ;-)))

Un Paperino gaetano(underscore)d(chioccioletta)hotmail(punto)com


Paperino

unread,
Oct 27, 2001, 6:22:13 PM10/27/01
to
"Paperino" ha scritto nel messaggio

> "ciccio" ha scritto nel messaggio
> > Scusate, ma non riesco a trovare in VBA la funzione per convertire un numero
> > esadecimale in decimale, ovvero l'inverso di "Hex".
>
> Chr$("&H" & StringaEsadecimale)

OOOPS! era:
Chr$(val("&H" & StringaEsadecimale)).

Comunque questa è una versione semplice:
_____________________
Dim test As String
Dim n As Integer
Dim StrOut As String
test = InputBox("Inserisci la riga HEX.")
test = Replace(test, " ", "")
For n = 1 To Len(test) Step 2
StrOut = StrOut & Chr$(Val("&H" & Mid$(test, n, 2)))
Next n
Debug.Print StrOut
_______________________________

Bye, G.


ciccio

unread,
Oct 27, 2001, 7:13:48 PM10/27/01
to

"Paperino" <non...@lo.dico> ha scritto nel messaggio
news:9rfbth$2odu$1...@stargate1.inet.it...

> "Paperino" ha scritto nel messaggio
> > "ciccio" ha scritto nel messaggio
> > > Scusate, ma non riesco a trovare in VBA la funzione per convertire un
numero
> > > esadecimale in decimale, ovvero l'inverso di "Hex".
> >
...Grazie Paperino, ammetto che vi sto seguendo (molto difficoltosamente)
già da ieri, utilizzando un paio di macro in excel, ma un programmino è un
programmino!!
Cmq, se ti interessa, al termine posso mandarti il tutto per farti fare 2
risate (max 30kb)!
Ciao e grazie da ciccio!


Paperino

unread,
Oct 27, 2001, 8:37:38 PM10/27/01
to
"ciccio" ha scritto nel messaggio
> ...Grazie Paperino, ammetto che vi sto seguendo (molto difficoltosamente)
> già da ieri, utilizzando un paio di macro in excel, ma un programmino è un
> programmino!!

:-))))

> Cmq, se ti interessa, al termine posso mandarti il tutto per farti fare 2
> risate (max 30kb)!

L'indirizzo è un paio di post sopra. Così, poi ti mando il mio:-)

> Ciao e grazie da ciccio!

De nada.

Bye, G.


Paperino

unread,
Oct 27, 2001, 8:43:13 PM10/27/01
to
"ciccio" ha scritto nel messaggio
> ...Grazie Paperino, ammetto che vi sto seguendo (molto difficoltosamente)
> già da ieri, utilizzando un paio di macro in excel, ma un programmino è un
> programmino!!

Aspe', forse ho capito male. Vuoi che ti mandi il mio prg perché
tu lo fai con Excel o cosa ? Non avevo notato l'accenno al VBA,
sai l'ora è quella che è... :-)
Se hai già i runtime di VB, ti basta l'eseguibile, saranno pochi K
di roba; io non l'ho neanche ancora compilato, lo uso dall'IDE :-).
Se vuoi basta che tu mi dia una e-mail valida, o che mi scrivi
all'indirizzo sopra.

Bye, G.


Michelangelo

unread,
Oct 28, 2001, 2:44:06 AM10/28/01
to
Veramente cosi' non potrebbe calcolare stringhe con quantita' di cifre
dispari e poi la formula e' comunque sbagliata poiche' ritorna una stringa
di caratteri [StrOut = StrOut & Chr$(.......] e non il valore numerico
decimale di tutta la stringa. Inoltre i caratteri che visualizzerebbe non
sono nemmeno quelli corrispondenti ai numeri 0123456789, ma solo i caratteri
corrispondenti ai codici ascii presi a coppie nella stringa di input.

Allora quella esatta e'questa:
<><><><><>
Dim test As String
Dim n, vout


test = InputBox("Inserisci la riga HEX.")
test = Replace(test, " ", "")
For n = 1 To Len(test)

vout = vout + Val("&H" & Mid(test, n, 1)) * 16 ^ (Len(test) - n)
Next n
MsgBox vout
<><><><><>
Michelangelo

Paperino <non...@lo.dico> wrote in message
9rfbth$2odu$1...@stargate1.inet.it...

Zanna

unread,
Oct 28, 2001, 5:37:09 AM10/28/01
to
"Michelangelo" <i...@me.it> ha scritto nel messaggio
news:9rgd09$9em$1...@newsreader.mailgate.org...

> Veramente cosi' non potrebbe calcolare stringhe con quantita' di cifre
> dispari e poi la formula e' comunque sbagliata poiche' ritorna una stringa
> di caratteri [StrOut = StrOut & Chr$(.......] e non il valore numerico
> decimale di tutta la stringa. Inoltre i caratteri che visualizzerebbe non
> sono nemmeno quelli corrispondenti ai numeri 0123456789, ma solo i
caratteri
> corrispondenti ai codici ascii presi a coppie nella stringa di input.

Allora permetimi qualche ulteriore puntualizzazione:


> <><><><><>
> Dim test As String
> Dim n, vout

Ma è necessario usare dei variant?
Facciamo:

Dim n as Long
Dim lOut As Long

> test = InputBox("Inserisci la riga HEX.")
> test = Replace(test, " ", "")

Questa non l'ho capita... una stringa Hex non dovrebbe contenere spazi.
Prendiamola per buona.

> For n = 1 To Len(test)
> vout = vout + Val("&H" & Mid(test, n, 1)) * 16 ^ (Len(test) - n)
> Next n

Ma non bastava un bel

lOut = Val("&H" & test)

?

> MsgBox vout

Ciao.

Michelangelo

unread,
Oct 28, 2001, 6:52:41 AM10/28/01
to
Zanna <zntf...@tin.it> wrote in message pdRC7.22053> > <><><><><>

> > Dim test As String
> > Dim n, vout
>
> Ma è necessario usare dei variant?

certo che no, ma l'ho scritta in 5 minuti

> Facciamo:
>
> Dim n as Long
> Dim lOut As Long
>
> > test = InputBox("Inserisci la riga HEX.")
> > test = Replace(test, " ", "")

questa l'aveva inserita l'autore non io e l'ho lasciata, sara' che gli
scappano spazi.

> Questa non l'ho capita... una stringa Hex non dovrebbe contenere
spazi.
> Prendiamola per buona.
>
> > For n = 1 To Len(test)
> > vout = vout + Val("&H" & Mid(test, n, 1)) * 16 ^ (Len(test) - n)
> > Next n

> Ma non bastava un bel
>
> lOut = Val("&H" & test)

No.
Se non l'hai capita prova a visualizzare &H8000 o &H80000 o &HFFFF e cosi'
via e vedi cosa ti da. certamente si possono inserire dei controlli ma
sarebbe risultato piu' codice del for next. Inoltre questa e' anche un modo
per far capire come si converte un esadecimale in decimale.

Michelangelo


ciccio

unread,
Oct 28, 2001, 8:22:31 AM10/28/01
to

"Michelangelo" <i...@me.it> ha scritto nel messaggio
news:9rgd09$9em$1...@newsreader.mailgate.org...
> Veramente cosi' non potrebbe calcolare stringhe con quantita' di cifre
> dispari e poi la formula e' comunque sbagliata poiche' ritorna una stringa
> di caratteri [StrOut = StrOut & Chr$(.......] e non il valore numerico
> decimale di tutta la stringa. Inoltre i caratteri che visualizzerebbe non
> sono nemmeno quelli corrispondenti ai numeri 0123456789, ma solo i
caratteri
> corrispondenti ai codici ascii presi a coppie nella stringa di input.

....Hai perfettamente ragione, ma la funzione che mi ha postato Paperino, è
quella che mi è + utile.
Ti spiego, il papero, nella sua ubiquità, sapendo dove volevo andare a
parare, ovvero a cosa mi sarebbe servita quella funzione, mi ha dato già la
conversione del numero esadecimale (peraltro per coppie di numeri - step =
2 - ), in numero decimale e successivamente nel corrispondente codice Ascii.
La storia sarebbe lunga da raccontare e parte da un'altro NG
(it.comp.sicurezza.virus), caso mai ti interessasse (non ne vale la pena).
Ti ringrazio comunque dell'interessamento e spero vorrai rispondere anche in
futuro ai miei quesiti da niubbo.
Ciao da ciccio!


Zanna

unread,
Oct 28, 2001, 8:42:50 AM10/28/01
to
"Michelangelo" <i...@me.it> ha scritto nel messaggio news:9rgria$bs5


> > Ma è necessario usare dei variant?

> certo che no, ma l'ho scritta in 5 minuti

Ok :)

> > > test = Replace(test, " ", "")
>
> questa l'aveva inserita l'autore non io e l'ho lasciata, sara' che gli
> scappano spazi.

Ok :)


> > Ma non bastava un bel
> > lOut = Val("&H" & test)
>
> No.
> Se non l'hai capita prova a visualizzare &H8000 o &H80000 o &HFFFF e cosi'
> via e vedi cosa ti da.

Ah, per via del segno?
Basta portare i vaolri a long:

Debug.Print Val("&H8000&")
Debug.Print Val("&HFFFF&")
Debug.Print Val("&H80000&")

Ciao

Michelangelo

unread,
Oct 28, 2001, 9:45:54 AM10/28/01
to
Zanna <zntf...@tin.it> wrote in message uXTC7.11152$> Ah, per via del

segno?
> Basta portare i vaolri a long:
>
> Debug.Print Val("&H8000&")
> Debug.Print Val("&HFFFF&")
> Debug.Print Val("&H80000&")

Non solo per via del segno, ma perche' va in overflow
Prova con &H80000000& e poi prova con la mia con 800000000000 naturalmente
con vout Double. Ma anche con valori superiori tioi FFFFFFFFFFFFFFFFFFFFFFF.
Il fatto e' che il ciclo for next l'ha introdotto l'autore del thread e gia'
lui aveva usato &HXX ma con solo due cifre, io l'ho ridotto a una cifra e tu
l'hai utilizzato per intero.
Dato che le conversioni di questo tipo devono essere precise, per esempio a
spedire dati su porte con buffers con centinaia di bit bisogna che non si
fermi mai.
Infatti pare che Val sia limitata gia' a &H800000000& ma va in overflow
anche a &H800000000#.
Io utilizzavo gli esadecimali per comunicazioni con apparecchiature esterne
e sinceramente una funzione di conversione che gia' a H800000000 va in
overflow non serve a niente tranne che per uso didattico.
Michelangelo


0 new messages