Newsgroup: it.comp.lang.visual-basic
Titolo: ESA

Come Faccio a tradurre un numero da DECIMALE ad ESA?
Ed da ESA a DECIMALE?
Callegher Marco
E-Mail: 
calm...@ronchiato.it


wrote:

prova con:
da decimale (Dec) a ESA (Esa)
Dim Dec As Long
Dim Esa As String
Dim Numero As Long
Dim Risultato As Integer
Esa = ""
Numero = Dec
For i = 7 To 0 Step -1
    Risultato = Int(Numero / 16 ^ i)
    Select Case Risultato
        Case 0 To 9
            Esa = Esa & Trim(Str(Risultato))
        Case 10
            Esa = Esa & "A"
        Case 11
            Esa = Esa & "B"
        Case 12
            Esa = Esa & "C"
        Case 13
            Esa = Esa & "D"
        Case 14
            Esa = Esa & "E"
        Case 15
            Esa = Esa & "F"
    End Select
    Numero = Numero - Risultato * 16 ^ i
Next i
(funziona solo con numeri fino a due miliardi e rotti, cioč il limite
di una variabile long)
==========================
da ESA (Esa) a decimale (Dec) 
Dim Dec As Long
Dim Esa As String
Dim NCifre As Integer
Dim Carattere As String
Dec = 0
NCifre = Len(Esa)
For i = 0 To NCifre - 1
    Carattere = Mid(Esa, i + 1, 1)
    Select Case Carattere
        Case "0" To "9"
            Dec = Dec + Val(Carattere) * 16 ^ (NCifre - i - 1)
        Case "A"
            Dec = Dec + 10 * 16 ^ (NCifre - i - 1)
        Case "B"
            Dec = Dec + 11 * 16 ^ (NCifre - i - 1)
        Case "C"
            Dec = Dec + 12 * 16 ^ (NCifre - i - 1)
        Case "D"
            Dec = Dec + 13 * 16 ^ (NCifre - i - 1)
        Case "E"
            Dec = Dec + 14 * 16 ^ (NCifre - i - 1)
        Case "F"
            Dec = Dec + 15 * 16 ^ (NCifre - i - 1)
    End Select
Next i
Fabrizio Filippini



...


Ed da ESA a DECIMALE?
Per tradurre da Decimale ad Esadecimale, esiste la funzione HEX() a cui devi
passare un valore numerico o stringa.
Per il contrario, (ESA in DECIMALE) puoi scrivere una semplice funzioncina
tu ad hoc.
bye


il metodo + semplice che ho trovato č:
    Dim a As String
    Dim v As Long
    v = 255
    ' a contiene "FF" dopo questa operazione
    a = Hex(v)
    ' v ri-contiene 255
    v = Val("&H" & a)

Ed da ESA a DECIMALE?
Esageriamo?
Private Function ConvBOHDec(ByVal sNum, ByVal iBase) As Variant
' Converte una stringa in un intero decimale in base 2, 8, 16.
Dim i
Dim iLen
Dim iPos
Dim lDec
Dim sBase
    Select Case iBase
        Case 2
            sBase = "01"
        Case 8
            sBase = "01234567"
        Case 16
            sBase = "0123456789ABCDEF"
        Case Else
            ConvBOHDec = Null
            Exit Function
    End Select
    iLen = Len(sNum)
    For i = iLen To 1 Step -1
        iPos = InStr(sBase, UCase$(Mid$(sNum, i, 1)))
        If iPos = 0 Then
            ConvBOHDec = Null
            Exit Function
        Else
            lDec = lDec + (iPos - 1) * iBase ^ (iLen - i)
        End If
    Next
    ConvBOHDec = lDec
End Function
Uso:
Dim sNum As String
Dim vDec As Variant
    ...
    vDec = ConvBOHDec(sNum, 16)
    If IsNull(vDec) Then
        ' sNum non e' un numero esadecimale valido.
        ...
    Else
        ...
    End If
Per la conversione Decimale/Esadecimale... ti devi arrangiare;)
--
Ciao.
Maurizio

Virus,
    Tra le tante forse la soluzione migliore:
sEsa = HEX(ndec)
nDec = Val("&H" & sEsa )
Lionello giustamente suggerisce comunque di leggersi l'help...
bye,
Alessandro Scardova
scar...@tin.it
http://space.tin.it/computer/ascardov/

Lionello giustamente suggerisce comunque di leggersi l'help...
Giusto! La lettura della guida in linea ti permette, infatti, di scoprire
che:
"Nel codice sottostante, Val restituisce il valore decimale -1 per il valore
esadecimale visualizzato:
Val("&HFFFF")".
Per cui preferisco usare i vecchi metodi se non so quanto sia grande il
numero da convertire. Sbaglio?
--
Ciao.
Maurizio

...

Si sbagli, perche' basta fare
    Val("&HFFFF&)".
Per forarlo a LONG!
ossia basta aggiungere la & a fine stringa hex.
Ciao
By -MES-   Maronese Ettore
http://ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://www.murialdo.it/it_lang_vb

ossia basta aggiungere la & a fine stringa hex.
!@#?*&\@!
Oppure, per spiegarmi meglio: ma porca di quella porca di quella porca...
Scusate.
--
Ciao.
Maurizio