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.pdfAlso 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
