mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik const String mit parity bit


Autor: stringcreater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stringcreater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Nami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sollte das gehen:

const unsigned char sting[] = {'t','e','x','t',0x0D};

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: stringcreater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stringcreater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: stringcreater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define P(x)    x^(((x<<1)^(x<<2)^(x<<3)^(x<<4)^(x<<5)^(x<<6))&0x80)

char s[] = {P('H'), P('a'), P('l'), P('l'), P('o'), 0};


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.