+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: somma di numeri esadecimali

  1. #1
    Stefano_1986_ non è in linea Novello
    Post
    13
    Salve è la prima volta ke scrivo qui [img]smileys/smiley4.gif[/img]
    spero di trovarmi bene
    Ho un problema:
    vorrei fare una funzione che mi permetta ogni volta ke la richiamo di farmi la somma di numeri esadecimali, niente di strano sino a qui, l'unico problema è ke devo fare una cosa del genere:

    626c75652e6a7067 = 317

    cioè

    62 + 6c + 75 + 65 + 2e + 6a + 70 + 67 = 317

    il 626c75652e6a7067 è contenuto in una textbox, ma nn importa dato ke è una funzione...
    praticamente devo dirgli di prendere le cifre a gruppi di 2 e sommarle
    se vi può essere utile,
    ho a disposizione la funzione hexdec che trasforma
    626c75652e6a7067
    in
    98 108 117 101 46 106 112 103

    converte le cifre esadecimali in decimali
    e in più le separa da uno spazio

    la uso così:

    Private Sub cmd1_Click()
    txt2.Text = hexdec(txt1.Text)
    End Sub

    quello contenuto nel txt1 (626c75652e6a7067)
    viene convertito nel txt2 (98 108 117 101 46 106 112 103)

    ora io devo fare la somma di questi numeri!
    98 + 108 + 117 + 101 + 46 + 106 + 112 + 103 = 791
    791 convertito in esadecimale = 317
    ke è quello ke devevo avere

    x convertirlo nn c'è problema ho fa funzione pronta (dechex)

    ora dovrei scriverlo in codice, e non ci riesco... [img]smileys/smiley7.gif[/img]
    mi va bene in qualsiasi modo....
    grazie mille
    aspetto risposta ciao!!![img]smileys/smiley32.gif[/img]

  2. #2
    L'avatar di slashmad
    slashmad non è in linea Scribacchino
    Luogo
    Italy
    Post
    763
    Ciao Stefano, se non ho capito male tu hai alla fine dei tuoi giri, una stringa così:
    "98 108 117 101 46 106 112 103", giusto?

    Be allora potresti splittarla con delimitatore lo spazio, in questo modo ottieni un array di stringhe, tipo:
    codice:
    strarray=Split(Trim(text2.text)," ")
    Ora non ti resta che sommare:
    codice:
    tot=0
    For i=0 To Ubound(strarray)-1
    tot = tot + CLng(strarray(i))
    Next
    Finisci trasformando il valore di tot, in esadecimale.


    Ciao

    [img]smileys/smiley1.gif[/img]



    Slash


    - Hai mai dato un'occhiata al Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

  3. #3
    Stefano_1986_ non è in linea Novello
    Post
    13
    ho fatto così:
    Private Sub Command1_Click()
    txt1.Text = "qui c'è il calcolo dove ricavo il mio numero esadecimale"
    txt2.Text = hexdec(txt1.Text)
    strarray = Split(Trim(txt2.Text), " ")
    tot = 0
    For i = 0 To UBound(strarray) - 1
    tot = tot + CLng(strarray(i))
    Next
    txt3.Text = tot
    End Sub

    è giusto???


    cmq nella txt1 c'è:
    3000002a0000004A0022000000000000000000002f622f6d6f 62696c652f 706963747572652f626c75652e6a7067

    nella txt2 lo converto in:
    48 0 0 42 0 0 0 74 0 34 0 0 0 0 0 0 0 0 0 0 47 98 47 109 111 98 105 108 101 47 112 105 99 116 117 114 101 47 98 108 117 101 46 106 112 103
    nella txt3 c'è il risultato della somma:
    2568

    ma è sbagliato!!!
    se io faccio la somma deve dare 2671
    ho provato a fare la somma a mano e da giusto!!!
    quindi c'è qualcosa di sbagliato nel codice:

    strarray = Split(Trim(txt2.Text), " ")
    tot = 0
    For i = 0 To UBound(strarray) - 1
    tot = tot + CLng(strarray(i))
    Next
    txt3.Text = tot

    grazie della tua risposta
    se puoi darmi un altro consiglio grazie ancora
    ciao


  4. #4
    L'avatar di slashmad
    slashmad non è in linea Scribacchino
    Luogo
    Italy
    Post
    763
    Si è sbagliata la definizione del ciclo:

    For i = 0 To UBound(strarray)

    invece di:

    For i = 0 To UBound(strarray) - 1


    Ciao

    [img]smileys/smiley1.gif[/img]
    Slash


    - Hai mai dato un'occhiata al Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

  5. #5
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    10,517
    Blogs
    5
    Non mi sembra che in VB ci sia la necessita' di scrivere funzioni di conversione da esadecimale a decimale e viceversa in quanto VB dispone gia' di tali strumenti.
    Inoltre, se la stringa esadecimale e' sempre composta da valori a due cifre, allora basta esaminarla in un ciclo cosi' com'e' senza ulteriori conversioni.
    In pratica la funzione che segue

    Private Function HexSum(ByVal hv As String) As String
    Dim i As Long
    Dim r As Long
    r = 0
    For i = 1 To Len(hv) Step 2
    r = r + Val("&H" & Mid$(hv, i, 2))
    Next i
    HexSum = Hex$(r)
    End Function

    accetta la tua stringa in input e restituisce la somma in output.
    Puo' essere usata cosi'

    Private Sub Form_Click()
    Print HexSum("626c75652e6a7067")
    End Sub

    Probabilmente tu stai cercando di calcolare un CRC (magari di un file .hex ...).

    Ciao
    Oregon

  6. #6
    Stefano_1986_ non è in linea Novello
    Post
    13
    Grazie Oregon,
    a dir poco mitico!!! [img]smileys/smiley32.gif[/img] [img]smileys/smiley32.gif[/img] [img]smileys/smiley32.gif[/img]

    slashmad grazie anke a te!!
    molto gentili!

+ Rispondi al Thread

Discussioni simili

  1. splittare numeri e sottrarli
    Da piratabobo nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 27-10-2006, 10:24
  2. Generare numeri casuali esadecimali
    Da lucagfc nel forum Visual Basic 6
    Risposte: 17
    Ultimo Post: 11-07-2006, 15:04
  3. Numeri casuali con percentuali pari e/o dispari.
    Da © rocky nel forum Visual Basic 6
    Risposte: 11
    Ultimo Post: 03-07-2006, 15:27
  4. [Access]Somma in una query
    Da stancostan nel forum Access
    Risposte: 2
    Ultimo Post: 28-06-2006, 11:50
  5. Risposte: 1
    Ultimo Post: 25-09-2005, 01:24

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi