Umrechnung mit u_char in ??

Gast #368227
Lesenswert?
• ▲
▼
Hallo,
ich habe 2 Variable:
u_char temp[1], temp[2];

nun möchte ich in meine 2 Ergebnisvariablen:
u_char ergebnis[1], ergebnis[2];

Jeweils die ersten 4 bit von temp[1] und temp[2] in ergebnis[1] und
die letzten 4 bit von temp[1] und temp[2] in ergebnis[2] kopieren.

Wie kann ich das machen?
Gast #368228
Lesenswert?
• ▲
▼
> u_char temp[1]...
Was soll das sein? Ein Array mit nur einer Komponente? Dann kannste das
[1] auch weglassen. Ansonsten verstehe ich Deine Fragestellung irgendwie
nicht ganz. Scheint ein wenig konfus...
Gast #368229
Lesenswert?
• ▲
▼
Ahh, ich glaub mir dämmerts so langsam. Du hast anscheinend ein Problem
mit der Syntax von Variablendeklarationen.

Zunächst mal: mit "typ name[n];" deklarierst Du ein Array von n
Komponenten des Typs "typ".

Vermutung: Was Du anscheinend willst, sind zwei Arrays mit jeweils zwei
Komponenten, von denen die eine Komponente des Arrays "ergebnis" die
High-Nibbles und die zweite die Low-Nibbles der Ausgangswerte enthalten
soll.

Du brauchst also zwei Arrays mit je zwei Komponenten:

u_char temp[2], ergebnis[2];

ergbnis[0] bekommt jetzt die High-Nibbles von temp[0] und temp[1]
zugewiesen:

ergebnis[0] = (temp[1] & 0xF0) | (temp[0] >> 4);

jetzt steht im High-Nibble von ergebnis[0] das High-Nibble von temp[1]
und im Low-Nibble von ergebnis[0] das High-Nibble von temp[0]. Wenn Du
das verstanden hast, sollte es kein Problem mehr für Dich sein, den
zweiten Teil selber zu programmieren...
Gast #368230
Lesenswert?
• ▲
▼
Eine Variable vom Typ u_char hat doch 8bit
z.B.
temp[1]=01101110
temp[2]=00010001

--> ergebnis[1]= 1111;  und   ergebnis[2]=0111;

die Indizes sind natürlich sinnlos!

Hoffe, dass man mich nun versteht
Gast #368231
Lesenswert?
• ▲
▼
1.: Die Indizes sind so, wie sie von Dir verwendet werden, nicht
sinnlos, sondern falsch!

2.: Da es keine 4-Bit-Variablen gibt, wirst Du um 8 Bit nicht
herumkommen.

3.: Du willst also jeweils die Summe der Nibbles bilden?
Gast #368233
Lesenswert?
• ▲
▼
Was heißt jetzt wieder "ansprechen"? Das was Du oben geschrieben
hast...

> temp[1]=01101110
> temp[2]=00010001

> --> ergebnis[1]= 1111;  und   ergebnis[2]=0111;

...deutet darauf hin, dass Du eine Summe oder eine Veroderung machen
willst.

Auf bestimmte Bits zugreifen kann man durch Maskierung (also eben z.B.,
indem man die nicht benötigten Bits ausblendet). Das wäre das, was ich
oben beschrieben habe (z.B. temp[1] & 0xF0 um das High-Nibble zu
isolieren).
Gast #368234
Lesenswert?
• ▲
▼
@johnny.m

Super! Vielen Dank, ich habe deinen Beitrag um 18:11 nicht gesehen, da
ich da grad selbst geschrieben hab und danach war nicht mehr
hochgescrollt habe. Ja, so hab ich es gemeint. Vielen Dank!!

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.