0x00 im Char-Feld handeln

So...jetzt bin ich dank Deiner hilfe schon ein ganzes Stück weiter.
Ich bin jetzt in der Lage, auch eine 0x00 aus dem Eingangspuffer der seriellen Schnittstelle zu laden, ich musste den ReadTimeOut-Multiplikator des COM-Ports erhöhen.

Bei der char-Variable hatte mir natürlich nur die Adresse anzeigen lassen - dumme Schusselfehler. :/

Die Struktur kann ich so leider noch nicht anwenden, da die jeweiligen Datencontainer im EEPROM des µC unterschiedlich groß sind, eine passende Routine zum ausarbeiten habe ich aber bereits, die müsste so klappen.

Nun habe ich noch ein kleines Problemchen mit der Darstellung der eingelesenen Zeichen bzw. derer Abbildung. klar ist mir, dass int=4Byte sind. Da aber char nur 1Byte groß ist, bildet mir die Ausgabe leider einige Zeichen mit vorangestellten ff ab (habe die Hexausgabe gewählt, da diese für mich am praktischsten ist). Bei "normalen Zeichen" wie 1 (0x31), a (0x61) u.s.w. zeigt er mir nur den zweistelligen Hex-Code an, bei Nicht-Standardzeichen wie z.B. 0x8f werden jedoch immer 3Byte mit ff vorangestellt. Wie kann ich das lösen?

Deinen Vorschlag habe ich jedoch so umgemünzt, leider funktioniert er nicht richtig, wenn das Programm an der Stelle read ist erscheint die Fehlermeldung "Das System kann die angegebene Datei nicht finden", im Debug-Modus meldet er "Unzulässiger Zugriff auf einen Speicherbereich"

Code:
int* cominhalt1;
  .
  .
  m_bytes=port.Read((char*)cominhalt1,1);
  .
  .
 
Ein kleiner Hinweis zum Überwachungsfenster:
Die Formatangabe ma zeigt deine Variable als 64 Byte Wert an
Also im Überwachungsfenster eingeben:
cominhalt, ma

Dann siehst du alle 64 Bytes, wobei nicht druckbare Zeichen als Punkt . dargestellt werden.
 
Zuletzt bearbeitet:
bei Nicht-Standardzeichen wie z.B. 0x8f werden jedoch immer 3Byte mit ff vorangestellt. Wie kann ich das lösen?

Code:
        int received = 0xffffff8f;
        int modified = 0x000000ff & received;
        printf("%x\n", modified);
Deinen Vorschlag habe ich jedoch so umgemünzt, leider funktioniert er nicht richtig, wenn das Programm an der Stelle read ist erscheint die Fehlermeldung "Das System kann die angegebene Datei nicht finden", im Debug-Modus meldet er "Unzulässiger Zugriff auf einen Speicherbereich"

Leider kenne ich die Funktion read nicht wie ich schon sagte, ich kenne nur das (Socket)
perdant in Linux und die bekommt als übergabe Parameter einen void* buf, somit
ist es möglich in sämtliche Buffer jeden Typs den Empfangenen Stream einzulesen.

Hast du denn dir vorher auch den Speicherplatz für deinen Lesebuffer allokalisiert,
das könnte die Fehlermeldung erklären. In dem Codeschnipsel von gerade hast dus nicht
getan:

Code:
int* cominhalt1;
  m_bytes=port.Read((char*)cominhalt1,1);

Richtig:

Code:
int* cominhalt1; 
  cominhalt = new cominhalt[1]; 
  m_bytes=port.Read((char*)cominhalt1,1);
bzw:
Code:
int cominhalt1[1];
  m_bytes=port.Read((char*)cominhalt1,1);

Gruß

RedWing
 
Danke!
Hatte den Speicherplatz für den Lesepuffer vergessen, jetzt funktionierts. *freu*

Leider klappt der Code
Code:
int cominhalt1[1];
 //cominhalt wird ja im read belegt...klappt mit und ohne (char*)
 int wasn=0x000000ff & cominhalt;
nicht. es kommt diese Fehlermeldung:
error C2297: '&' : Ungültig, da der rechte Operand vom Typ 'unsigned char [11]' ist
 
Du sprichst in Rätseln...ich habe die zweite Codevariante verwendet, denn bei der ersten
Code:
	int* cominhalt2; 
 	cominhalt2 = new cominhalt3[1];
gibt mir der Compiler ein error C2061: Syntaxfehler : Bezeichner 'cominhalt3' zurück.
 
sTEk hat gesagt.:
Du sprichst in Rätseln...ich habe die zweite Codevariante verwendet, denn bei der ersten
Code:
	int* cominhalt2; 
 	cominhalt2 = new cominhalt3[1];
gibt mir der Compiler ein error C2061: Syntaxfehler : Bezeichner 'cominhalt3' zurück.
Code:
	int* cominhalt2; 
 	cominhalt2 = new int[1];

=>
Code:
 //cominhalt wird ja im read belegt...klappt mit und ohne (char*)
 int wasn=0x000000ff & cominhalt2[0];
 
@RedWing

Danke Dir - es klappt alles!
Jetzt kann ich wesentlich beruhigter in die Weihnachtszeit starten. :)


An alle ein Frohes Fest!
 
Zurück