unsigned char in TString umwandeln



  • Hi

    Ich habe einen unsigned char

    unsigned char InString[COM_BUFFER_SIZE + 1]
    

    und möchte ihn in ein String umwandeln, um ihn mit einem TLabel anzeigen zu können.

    Wer kann mir helfen?, bin unter Zeitdruck, Schulprojekt!
    Danke schon mal!

    gruß FB4



  • StrCopy(char * Dest, const char * Source);



  • Da die Caption von TLabel ein AnsiString ist, würd ich einfach mal die normale Zuweisung ausprobieren. Wenn das nicht hilft, caste das Array einfach nach char. Dann sollte es auf jeden fall klappen.



  • @T_B__ StrCopy: geht nicht! TString bleibt unverändert!

    @PuppetMaster2k:
    Normale Zuweisung? So oder? Label1->Caption=InString;
    das geht nicht!
    was meinst du mit Array nach char casten?

    gruß FB4



  • Bei mir funktioniert es mit StrCopy, wenn der String schon genügend Zeichen hat.

    unsigned char InString[10];
    InString[0] = 'a';
    InString[1] = 'b';
    InString[2] = 'c';
    InString[3] = 0;
    String s = "              ";
    StrCopy(s.c_str(),InString);
    Label1->Caption = s;             //Caption -> "abc"
    


  • FB4 schrieb:

    TString bleibt unverändert!

    Kurze Anmerkung: TString ist eine abstrakte Klasse und kann daher nicht instanziert werden!

    FB4 schrieb:

    was meinst du mit Array nach char casten?

    Damit meine ich sowas:

    unsigned char InString[] = "Ich werde mal eine Caption";
    //C++ Style Cast
    Lable1->Caption = static_cast<char>(InString);
    //oder C-Style Cast
    Lable1->Caption = (char)InString;
    

    Aber warum muss es denn ein unsigned char Array sein? Hat das einen speziellen Grund? Warum nicht AnsiString oder std::string?



  • sollte es nicht auch mit folgendem gehen?

    unsigned char InString[] = "Ich werde mal eine Caption";
    AnsiString    Str        = AnsiString((char*) InString);
    


  • Hallo,

    @PuppetMaster2k
    Wenn schon casten, dann so
    Lable1->Caption = reinterpret_cast<char *>(InString);
    Immerhin ist InString ein char-Array

    @Sunday
    Die explizite Umwandlung des gecasteten InString ist hier nicht nötig (siehe oben).

    @T_B__
    Dein StrCopy auf den internen AnsiString-Pointer ist gefählich. Du weisst schließlich nicht, wieviel Speicher da vereinbart wurde und kannst damit also auch in nichtallozierten Speicher schreiben.



  • **@all Danke es hat geklappt

    Habe aber ein neues Problem:**

    Ich programmiere ein Programm welches über die Com-Schnittstelle Daten von einer Wetterstation (von ELV - www.elv.de) empfängt.

    Gesendet wird mit: 19200 Baud, 8 Bit, ungerade Parität und 2 Stopp-Bit
    Hier ist das Datenprotokoll: http://www.elv-downloads.de/service/manuals/PC-WS-Testempfaenger/39061-PC-WS-Testempfaenger.pdf

    Also habe ich erstmal den Port geöffnet ....

    DCB dcb;
    hCom = CreateFile ("Com1",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
    dcb.DCBlength = sizeof (DCB);
    GetCommState (hCom,&dcb);
    dcb.BaudRate=9600;
    dcb.ByteSize=8;
    dcb.Parity=NOPARITY;
    dcb.StopBits=ONESTOPBIT;
    SetCommState (hCom, &dcb);
    
    if (hCom == INVALID_HANDLE_VALUE) // hat es geklappt? Bei Fehler ist hier Schluss!
       {
          MessageBox (NULL, "Fehler beim Öffnen des COM-Ports", NULL, NULL);
    
       }
    }
    

    .... dann die Read funkion ausgeführt ....

    unsigned char InString[COM_BUFFER_SIZE + 1];
    
    DWORD dwRead = 0;
    if(!ReadFile (hCom,&InString,sizeof (InString),&dwRead,NULL))Application->MessageBox("Fehler!!!!","",0);
    
    if(dwRead != 0)
    {
    InString[dwRead]='\0';
    }
    
    Label1->Caption = reinterpret_cast<char *>(InString);
    

    Nun zum Problem:
    Die Wetterstation schickt alle 3min neue Daten.
    Aber schon nach 10 sek bekomme ich eine Antwort von der COM.
    Und zwar sehr merkwürdige zeichen, zB ˜ï

    Brauche dringend Hilfe! Danke!

    gruß FB4 😉


Anmelden zum Antworten