Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152

    [VB6] Separare byte e stringa da variabile Variant

    Eccomi quà,

    ho un server socket che, per motivi che ho capito che devo apprezzare, mi restituisce i dati in una variabile variant dicendomi con un numero nei primi X Bytes quanto sarà lungo il buffer che mi invia .

    Io adesso vorrei riuscire a ricavare questo dato in maniera da poter agire di conseguenza. Il mio problema, al di là del contesto in cui sto lavorando, è che non so leggere:

    in fase di debug vedo la mia variabile con i tre quadratini iniziali (i bytes con il numero) e poi i caratteri del testo che mi invia, ma ovviamente se provo a mettere la variabile in un msgbox o in un field testuale non mi viene visualizzata.

    es:
    Nbytes = Mid(DatiRicevuti, 1, 3) ' in debug vedo che c'è qualcosa
    MsgBox Nbytes ' non stampa a video


    so che la soluzione è semplice ma come al solito è semplice per chi lo sa fare :master:

    Spero di "essermi capito", nel caso mi spiego meglio

    Grazie
    Cia'

  2. #2
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247
    Quando leggi da un buffer di dati acquisiti da socket o da seriale credo che per vedere i byte che vengono scritti devi utilizzare la funzione asc,ossia devi riottenere il loro codice ascii(altrimenti i caratteri direttamente letti non sono stampabili ).
    Quindi per esempio il tuo buffer fosse una stringa di caratteri con la funzione Mid$ recupero i singoli byte e con la asc riottieni il codice asc e se vuoi vederli in formato esadecimale uso la funzione hex.


    Spero di esserti stato di aiuto.


    Ciao
    Andrea

  3. #3
    Credo sia chiaro
    Il numero è scritto in esadecimale.
    Come prima cosa devi essere sicuro che tutti e tre i bytes indicano la dimensione (leggi il manuale dello strumento con cui comunichi).
    Poniamo che tutti e tre i bytes lo siano, per calcolare il valore decimale devi fare così:
    per ottenere un valore decimale di un singolo byte si usa ASC(bytes)
    partendo dal byte di DESTRA
    ValoreDecimale = ASC(primo byte) * 256^0 + ASC(secondo byte) * 256^1 + ASC(terzo byte) * 256^2
    Quindi
    codice:
    Function VisualizzaValoreDecimale (Numero As String) As Long
        Dim I as Integer
        Dim Somma As Long
        Somma = 0
        For I = Len(Numero) To 1 Step -1
            Somma = Somma + ASC(Mid(Numero, I, 1)) * 256^(Len(Numero)-I)
        Next I
        VisualizzaValoreDecimale = Somma
    End Function
    
    ...
        LunghezzaCheCerchi = VisualizzaValoreDecimale(Mid(DatiRicevuti,1,3))
    ...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152
    Grandissimi !!!!!

    ci ero arrivato vicinissimo alla soluzione! La mia funzione assomigliava un po' a quella che mi hai inviato!!

    Ora la testo e vi faccio sapere e ti confermo che il numero dei bytes iniziali è un X fisso!!

    Grazie mille

    Cia'


    P.S. Lo sapevo io che era una cosa semplice per chi la sapeva fare :-D

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152

    Overflow

    mi va in overflow la variabile somma che è long :master:

    ho provato con

    ciccio = VisualizzaValoreDecimale("00511760")
    msgbox ciccio

    e con

    ciccio = VisualizzaValoreDecimale("005117") ' non sono ancora convino di quanti siano i bytes ;-)
    msgbox ciccio

    ...
    mi sa che c'è da rivedere qualcosa ... o sbaglio io?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152

    Scusa ...

    sono un fesso dovevo metter mid() etc ... come mi avevi detto tu ...


    Grazie mille funziona!

    Cia'

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.