Newsgroup: it.comp.lang.visual-basic
Titolo: Conversione dall'esadecimale

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!

 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

 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.

 >
...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!

 Ciao e grazie da ciccio!
De nada.
Bye, G.

 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.

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...


  MsgBox vout
Ciao.

     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

 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!

 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

 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