Hallo an alle die das hier lesen! Ich habe folgendes Problem Ich möchte in ein uint8_t array[12] bitweise schieben geht aber nur für das erste Byte alle anderen sind 0. array[0] |= (1<<0...7) geht array[0] |= (1<<8....) geht nicht mehr AVR GCC attiny2313 Gruß Torben
du kannst nicht über das byte hinausschieben aber probier doch mal folgenden code unsigned char temp; temp = (1 << x); array[0] |= (unsigned char)temp; array[1] |= ((unsigned char)temp >> 8);
Oder: unsigned char x = [hier willst du eine 1]; array[x/8] |= (1 << (x%8));
Ich wollte das Array eigentlich nicht hochzählen da ich einen Bit counter habe und müßte dann die bytes noch zählen und die bits runter teilen.
Wo ist das niederwertigste Bit? Annahme: Bit 0 in array[0] ist das niederwertigste Bit Bit 7 in array[11] ist das höchstwertigste Bit Um 1 Bit über 12 Bytes hinweg um jeweils 1 Stelle zu schieben
1 | for( i = 11; i > 0; --i ) { |
2 | tmp = array[i-1] & 0x80; |
3 | array[i] = array[i] << 1; |
4 | if( tmp ) |
5 | array[i] |= 0x01; |
6 | }
|
7 | array[0] = array[0] << 1; |
Einer der wenigen Dinge, die ein heisser Kandidat für Inline Assembler sind, da man dort durch Einbeziehung des Prozessor Carry Flags, die ganze 'Übertragsberücksichtigung' ins nächste Byte einfacher hinkriegt.
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.