Edit1... Ansistring und Hexzahlen



  • Guten Morgen.

    Ich bekomme über die VaComm Hexzahlen rein 0x30-0x39.

    void __fastcall TForm1::VaComm1RXChar(TObject *Sender, int Count)
    {
     unsigned int i;
     unsigned char *caBuffer;
    
     caBuffer = (unsigned char *)malloc(Count +1);
     VaComm1->ReadBuf(caBuffer,Count);
    
     for (i=0; i<Count-1; i++)
     {
      Edit1->Text = Edit1->Text+(IntToStr(caBuffer[i]-0x30));
     }
    }
    

    bekomme ich jetzt über Uart: 39 39 39 39 39 39 was ja 999999 entspricht, steht dieses leider nicht im Edit1 Feld. Bekomme ich 31 32 33, so steht auch im Edit Feld 123.

    Wer kann mir helfen ?

    Danke, Markus



  • Deine Konvertierung ist völlig unnötig!
    Laß dir einfach mal den Inhalt von caBuffer ausgeben (vorher nullterminieren):

    void __fastcall TForm1::VaComm1RXChar(TObject *Sender, int Count)
    {
      unsigned char *caBuffer = (unsigned char *)malloc(Count +1);
      VaComm1->ReadBuf(caBuffer,Count);
    
      caBuffer[Count] = '\0';
      Edit1->Text = caBuffer;
    }
    

    Merke: du kriegst einfach Bytes zurück - wie du sie anzeigst (ob als Hex-Werte oder aber als ASCII-Werte) ist ganz allein eine Frage der Formatierung.



  • Hallo...

    Error: Connot convert 'unsigned char * to 'AnsiString'

    lg, markus



  • Hallo

    AnsiString will ein char*, nicht ein unsigned char*. Schau mal ob das VaComm auch mit einem char* arbeitet. Wenn nicht must du eben mit dem Holzhammer ran :

    Edit1->Text = reinterpret_cast<char*>(caBuffer);
    

    Natürlich könnte sich dadurch die Bedeutung der Zeichen ändern, nur die Zeichen bis ASCII 128 bleiben unverändert.

    bis bald
    akari


Anmelden zum Antworten