Hallo, ich habe z.B. folgenden String, den ich in einer Header datei definiere: const unsigned char sting = "text\r". diesen möchte ich jedoch gleich so eingeben, dass das oberste Bit ein parity even Bit der unteren 7 Bits ist. Ich möchte also als letztes Zeichen nicht '\r' (0x0D) eingeben, sondern ein Zeichen, was den hex Wert 0x8D hat, eingeben. Gibt es da eine Möglichkeit? das Zeichen 0x8D liegt ja nicht so ohne weiteres auf der Tastatur ;-) Vielen Dank Martin
oh, ich sehe gerade, dass ich den string nicht als const unsigned char hier habe, sondern als define: #define STRINGNAME "text\r" mein problem bleibt aber das gleiche, statt '\r' möchte ich ein 0x8D da drin stehen haben.
So sollte das gehen: const unsigned char sting[] = {'t','e','x','t',0x0D};
Oder so: const unsigned char sting = "t\xe5xt\x8d". Problematisch kann es bei dieser Schreibweise werden, wenn eine hexadezimale Zeichenkonstante nicht eindeutig ist, wie sie es wäre, wenn auf das 'e' beispielsweise ein d folgen würde: "ed" -> (mit parity) "\xe5d" In diesem Falle sollte besser "\xe5""d" geschrieben werden.
Vielen Dank für Deine lösung, sie klappt aber bei dem #define fall leider nicht. ich habe aber gerade erfahren, dass es ein hex escape zeichen gibt, was genau das tut, was ich will: #define STRINGNAME "text\x8D" Schönen Tag noch
@rufus danke auch Dir, da hast Du 'nen punkt angesprochen, den ich glatt übersehen hätte. ist denn "te""xt" immer das gleiche wie "text" ? der compiler hat mir schon mal keine probleme rausgeschmissen, aber testern kann ich es gerade mangels hardware nicht ausgiebig.
Und Du bist sicher, daß Du die Daten keinesfalls über die UART senden willst ? Parität kann die UART beim AVR automatisch machen. Spart also weder Zeit noch Code, wenn man das selber macht. Peter
stringcreater wrote:
> ist denn "te""xt" immer das gleiche wie "text"?
Zumindest auf jedem C-Compiler, der zu ANSI C89/ISO C90 und höher
kompatibel ist.
@peda, ich bin sicher, DASS ich die daten über UART senden will, habe aber das problem, dass ich uart auf 8bit no parity stellen muß und nicht auf 7 bit, parity even stellen kann. (muß auch bytes, die über UART mit falscher parität ankommen, ebenfalls mit falscher parität über UART weiterleiten und einiges mehr...) @Jörg das sollte der WinAVR wohl hinbekommen, vor allem mit der compileroption -std=c99 Vielen Dank euch allen
1 | #define P(x) x^(((x<<1)^(x<<2)^(x<<3)^(x<<4)^(x<<5)^(x<<6))&0x80)
|
2 | |
3 | char s[] = {P('H'), P('a'), P('l'), P('l'), P('o'), 0}; |
Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.