Char in 2 Hälften teilen

Gast #522251
Lesenswert?
• ▲
▼
Hi.
Ich mache gerade meine ersten gehversuche mit µCs und C.
Im Tutorial habe ich was gefunden wie man einzelne Bits von Ports und 
registern setzen, löschen oder abfragen kann.
Gibt es etwas vergleichbares auch mit 4 Bit?
Ich möchte das High- und das Low Nibble betrennt voneinander betrachten, 
aber nur ein Zeichen verwenden
Beispiel:
Das Zeichen ist 0x0d und ich möchte das High-Nibble um eins erhöhen.
Wie kann ich in einer If oder case abfrage rausfinden, ob das Low-Nibble 
z.B. 7 ist?
Gast #522262
Lesenswert?
• ▲
▼
Die Bit-Operatoren sind dein Freund
http://www.pronix.de/pronix-676.html

// Das Zeichen ist 0x0d...

unsigned char daten = 0x0d;
unsigned char oberes_nibble  = (daten & 0xF0) >> 4 ;
unsigned char unteres_nibble = (daten & 0x0F);

// ... und ich möchte das High-Nibble um eins erhöhen.

oberes_nibble += 1;
daten = (oberes_nibble << 4) | unteres_nibble;

// Wie kann ich in einer If oder case abfrage rausfinden,
// ob das Low-Nibble z.B. 7 ist?

if (unteres_nibble == 7)

// Ich möchte das High- und das Low Nibble betrennt voneinander 
betrachten,
// aber nur ein Zeichen verwenden

#define OBERES_NIBBLE(x)  (((x) & 0xF0) >> 4)
#define UNTERES_NIBBLE(x)  ((x) & 0x0F)

if (UNTERES_NIBBLE(daten) == 7)

daten = ((OBERES_NIBBLE(daten) + 1) << 4) | UNTERES_NIBBLE(daten);
Gast #522278
Lesenswert?
• ▲
▼
Wenns wirklich nur um Erhöhungen um feste Werte (z.B. 1) geht, würde ich 
das Hin- und Hergeshifte seinlassen. Kostet nur Zeit und Codezeilen, 
auch wenns etwas leichter zu verstehen ist.

also daten = ((daten & 0xf0) + 0x10) | (daten & 0x0f)

Für wüste Berechnungen damit sind Makros wie von Stefan vorgeschlagen 
natürlich übersichtlicher.

Antwort schreiben

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.

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.