@Stefanie (Gast)
>wie kann ich automatisch ein Byte auf 2 Bytes verdoppeln, indem ich
>jedes Bit nochmals kopiere.
>Z.B.
>Ausgangsbyte:
>0100 1101
>Verdoppelt
>00110000 11110011
Naja, verdoppeln ist das nicht unbedingt.
>Kann mir wer sagen, wie ich das am geschicktesten Hinkriege (über einen
>Algorithmus). Meine Lösung wäre nur die einzelnen Bits anzusprechen und
>in 2 Bytes zu stecken.
Eine von vielen möglichen Lösungen. Soll es schnell oder speichersparend
sein? Sehr schnell ist eine Tabelle aus 256 Einträgen a 16 Bit.
data_doppelt = tabelle[data_einfach].
Die Tabelle kann man entweder vorher per Excel oder was auch immer
berechnen oder am Programmstart füllen. Diesen Füllalgorithmus kann man
auch allein zur Berechnung nutzen, ist zwar langsamer aber ggf.
platzsparender.
1 | uint16_t j;
|
2 | uint8_t i;
|
3 |
|
4 | j=0;
|
5 | if (i & 0x01) j|= 0x0003;
|
6 | if (i & 0x02) j|= 0x000C;
|
7 | if (i & 0x04) j|= 0x0030;
|
8 | if (i & 0x08) j|= 0x00C0;
|
9 | if (i & 0x10) j|= 0x0300;
|
10 | if (i & 0x20) j|= 0x0C00;
|
11 | if (i & 0x40) j|= 0x3000;
|
12 | if (i & 0x80) j|= 0xC000;
|
Sollte auch recht schnell sein, auch auf nem AVR. Kompakter aber etwas
langsamer ist eine Schleife.
1 | uint16_t j, k;
|
2 | uint8_t i;
|
3 |
|
4 | for (j=0, k=3; k !=0; k<<=2, i>>=1) {
|
5 | if (i & 0x01) j|=k;
|
6 | }
|
@ Frank K. (fchk)
Das ist glaube ich nicht, was der OP will.