Frage zu char in C *gelöst*

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Frage zu char in C *gelöst*

Beitrag von weedy » 01.11.2016 22:29:32

Hi,

ich habe arge Schwierigkeiten, einen C-String zu kreieren, der einen Hexwert enthält und danach eine beliebige Zeichenfolge.

"\x02Z" ... liefert einen 2-Zeichen langen String mit den Werten hex. 02 5A

"\x02A" ... liefert einen 1-Zeichen langen String mit dem Wert hex. 2A

Würde ich den String mit sprintf zusammensetzen, gäbe es das Problem nicht, wäre aber höherer Aufwand. Ich hätte es aber gerne so, dass ich auf eindeutige Art und weise einen String bereits in den Code schreiben kann.

Hier macht mir der C-Compiler einen Strich durch die Rechnung, weil er irgendwie die 0 auffrisst nach belieben.

Gibt es vieleicht eine Quotation, die das Ende der Hex-Eingabe eindeutig bestimmen kann, oder klar festlegt, dass der Hexwert exakt 2 Zeichen enthalten soll?

Also bei Oktal funktioniert das übrigens; 3 Zeichen werden da nicht überschritten, so dass man sauber codieren kann. Aber ich hätte eben gerne Hex.

Ah, ich habs (da hat doch noch was aus einer uralten Zeit geklingelt):

"\x02""A" liefert einen 2-Zeichen langen String mit den Werten hex. 02 41

Gruß

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Frage zu char in C *gelöst*

Beitrag von Meillo » 02.11.2016 09:17:06

Schoen, dass du dir schon selbst geholfen hast. Die Wikipedia haette es sonst auch gekonnt: https://en.wikipedia.org/wiki/Escape_se ... _sequences
Use ed once in a while!

Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Frage zu char in C *gelöst*

Beitrag von weedy » 03.11.2016 17:32:07

Meillo hat geschrieben:Schoen, dass du dir schon selbst geholfen hast. Die Wikipedia haette es sonst auch gekonnt: https://en.wikipedia.org/wiki/Escape_se ... _sequences
Danke für den Link.

Dass ich das überhaupt untersucht habe, hat noch einen andere Grund. Das Programm printf aus den coreutils scheint da ganz anders zu funktionieren.

Nun weiss ich jedenfalls, dass hier die hex-darstellung eindeutig auf 2 Zeichen beschränkt ist:

Code: Alles auswählen

$ printf "\x61bc\n"
abc
Doch das eigentlich interessante Feature ist:

Code: Alles auswählen

$ printf -- "a\x00b\x00c" | xargs -n1 --null echo
a
b
c
Und das geht naturgemäß so in C nicht.

Was aber funktionieren müsste ist:

Code: Alles auswählen

char str[]="a\0""b\0"c";
Dann muss man aber die Bufferlänge immer zu Fuß ausrechnen und kann die printf-Funktionsklasse komplett vergessen - es sei dann, man arbeitet mit einer gequoteten Zwischenabbildung des Strings.

Gruß

Antworten