Fehler bei char[]="\x01Auto"

OP #1025935
Hallo,

Man kann doch in einem character array in C im Initialisierungs-String 
Zeichen als hexadezimalen Wert angeben, so wie im Betreff. Also mit 
\xhh, vobei hh die Hexadezimalziffern sind.

Nach meinem Wissen sollte der Compiler aus:
1
const char []="\x01Auto";
folgende Bytefolge im Speicher machen (hex):
01 41 75 74 6F 00

Bei mir tut er es aber nicht. Bei mir interpretiert er immer das 'A', 
welches auch eine hex-Ziffer sein könnte, als solche und macht aus \x01A 
0x1A
also:
1A 75 74 6F 00

Wie kann ich das verhinder, bzw. wieso ist das überhaupt so, denn ein 
char-Zeichen kann ja nur aus maximal zwei hex-Ziffern bestehen.

Ich verwende den arm-gcc. Die Version weiß ich gerade nicht, da muss ich 
morgen nochmal nachschauen.

VDumfG
hahgeh
#1025937
Man kann Strings unterteilen, dadurch kann man das Interpretieren als 
Hex beenden:
const char []="\x01""Auto";
Die beiden Strings "\x01" und "Auto" werden automatisch zusammengefügt.

Ich bin auch schon auf dieses Problem reingefallen, das je nach Text nur 
selten auftritt (nämlich wenn der auf den Hex Wert folgenden Buchstaben 
ein A-F ist).
Moderator Persönliche Seite #1025957
Hermann Günther wrote:

> Aber das ist schon irgendwie seltsam. Gibt es für dieses Verhalten einen
> bestimmten Grund, oder ist das "nur" ein Compilerfehler?

Es ist ein Fehler in deinem Code.  Der Compiler tut genau das, was ihm
der C-Standard aufträgt.  Oktale Escape-Folgen werden nach dem dritten
Zeichen oder beim ersten nicht-oktalen Zeichen beendet, je nachdem,
welche der beiden Bedingungen zuerst eintritt.  Hexadezimale Folgen
werden ausschließlich mit dem ersten nicht-hexadezimalen Zeichen
beendet.  Auf diese Weise lassen sich Bytes mit beliebig vielen Bits
abbilden.

Meines Wissens ist eigens dafür in C89 (also vor ca. 20 Jahren) die
Möglichkeit eingeführt worden, dass zwei aufeinanderfolgend
geschriebene Zeichenkettenkonstanten vom Compiler zu einer einzigen
zusammengefügt werden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.