Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    13

    Cifra "mancante" con ReadByte

    Ciao,
    ho un problema con la gestione di dati (byte) letti da seriale. Il mio problema e' il seguente:
    il numero di byte da leggere (dato vero e proprio) mi arriva scritto in due byte successivi, quindi faccio:

    Dim ByteToRead as int16
    ByteToRead = comport.readbyte
    ByteToRead &= comport.readbyte


    cosi nella variabile ByteToRead ho il numero di byte di dati da leggere e posso usarla come contatore in un ciclo FOR.
    Arrivo al dunque del problema con un esempio:

    prima lettura -> comport.readbyte = 2 -> ByteToRead = 2
    seconda lettura -> comport.readbyte = 2 -> ByteToRead = 2&2 =22

    Ma questo e' sbagliato, perche' sarebbe 02 & 02, che farebbe ByteToRead = 202 e non 22...
    Ecco la mia domanda: come posso mettere gli zeri "mancanti" quando il dato letto e' di una sola cifra?
    (Ho pensato alla funzione mid ma funziona sulle stringhe e io devo lavorare per forza con variabili byte...)
    Spero di essere stato chiaro nell'esporre il problema...
    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    13
    Ho risolto da solo...

    Dim TempReaded as String = "0"

    Dim ByteToRead as int16
    TempReaded = TempReaded & comport.ReadByte
    TempReaded = Mid(TempReaded, TempReaded.Length, 2)
    ByteToRead = TempReaded
    TempReaded = "0"
    TempReaded = TempReaded & comport.ReadByte
    TempReaded = Mid(TempReaded, TempReaded.Length, 2)
    ByteToRead = ByteToRead & TempReaded

    Ultima modifica di ingfra88; 30-06-2017 a 10:31

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Secondo me sei fuori strada. Se leggi due byte e devi ottenere una word, il dato ottenuto deve essere un UInt16 e devi lavorare con gli operatori sui bit, non con & delle stringhe ... E poi il risultato lo dovresti vedere in esadecimale.

    Sar�

    codice:
            Dim WordToRead As UInt16
            WordToRead = comport.readbyte
            WordToRead = (comport.readbyte << 8) Or WordToRead
    
    
            Console.WriteLine(WordToRead.ToString("X"))
    Ultima modifica di oregon; 30-06-2017 a 11:45
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    13
    Grazie per il consiglio!
    Pero' ho provato il tuo codice e non funziona...proverò comunque a gestire il tutto con gli shift operator...

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quote Originariamente inviata da ingfra88 Visualizza il messaggio
    Grazie per il consiglio!
    Pero' ho provato il tuo codice e non funziona...proverò comunque a gestire il tutto con gli shift operator...
    Veramente il codice funziona. Se non argomenti meglio, devo pensare che stai sbagliando qualcosa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.