PS:Si accettano consigli su come sopperire ad eventuali mancanze!
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
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.
:-))))
> 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.
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.
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...
> 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.
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
....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!
> > 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
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