Wie verwende ich Zeichen in Zeichenfolgen außerhalb des druckbaren ASCII-Bereichs?

Ich versuche, eine Zeichenfolge mit Zeichen außerhalb des druckbaren ASCII-Bereichs zu erstellen. Ich verwende einen STM32-Mikrocontroller mit der µVision IDE mit dem Keil-Compiler. Die Dokumentation erlaubt verschiedene Escape-Sequenzen, darunter eine für "ASCII-Code in Hexadezimal". Wenn ich nur ein Zeichen möchte, gibt es kein Problem, aber wenn ich nach dem Zeichen andere Zahlen in dieselbe Zeichenfolge einfügen möchte, bekomme ich Probleme.

Das funktioniert.

char myString[10] = "\x06";//(It gives me 0x06,0x00,...,0x00)

Dies nicht. (Es gibt mir 0x60

char myString[10] = "\x060";//(It gives me 0x60,0x00,...,0x00)

Je mehr Zeichen (0-F) in derselben Kontinuität, die immer wieder als Hexadezimalziffern derselben Zahl angehängt werden (es wird sogar eine Warnung ausgegeben, dass sie außerhalb des gültigen Bereichs liegt, wenn die Zahl zu groß wird). Gibt es einen Weg, dies zu umgehen? Könnte dies ein Compiler-Problem sein?

Antworten (2)

Wenn Sie fragen, wie eine Hex-Escape-Sequenz beendet werden kann, wenn ein Zeichen folgt, das eine Hex-Ziffer ist, finden Sie hier eine Möglichkeit

"\x06""0"

Verwenden Sie zwei doppelte Anführungszeichen.

Andernfalls verbraucht eine Hex-Escape-Sequenz alle nachfolgenden Hex-Ziffern, die folgen.

Wenn Sie eine solche Zeichenfolge initialisieren, geben Sie jeweils ein Zeichen an. Ein Zeichen kann nur einen Wert zwischen 0 und 255 enthalten. Wenn Sie mehr Bytes Ihres Strings füllen möchten, geben Sie einfach mehr Zeichen im Initialisierer an:

char myString[4] = "\x06\x60\x44";

Beachten Sie, dass nicht angegebene Zeichen nicht garantiert mit Nullen gefüllt werden, obwohl eine 0 am Ende dessen steht, was Sie als Initialisierer angeben:

char string2[8] = "test";

Fünf Zeichen werden initialisiert, die Zeichen 6 bis 7 können Müll enthalten.

Es wäre genauer zu sagen, dass ein Zeichenfolgenliteral eines charnach dem anderen angibt. Das OP hat nicht gesagt, welche Codierung er verwendet, aber in einigen Codierungen kann es mehr als eine charpro Zeichen geben.