23. november 2008 - 21:57
Der er
5 kommentarer og 1 løsning
shifte bit fra 1 char ind i en anden char
Jeg har et array som følger: unsigned char førArray[9] = { 0x04, 0xAA, 0x20, 0x04, 0xAA, 0x20, 0x04, 0xAA, 0x20 } Jeg skal have shiftet data mod højre eller mod venstre. Jeg tænker en funktion ala denne : void shift( numberOfShifts = 4, _from* = førArray, _to* = efterArray, arraySize = 9, retning = LEFT) { for ( 0 to arraySize ) shift _from[n+0] numberOfShifts mod retning } der giver dette resultat unsigned char efterArray[9] = { 0x4A, 0xA2, 0x00, 0x4A, 0xA2, 0x00, 0x4A, 0xA2, 0x00 } Det største tal der kan benyttes er 16 bit langt pga. hardware Der skal ALDRIG shiftes mere end 8 bit
Annonceindlæg fra DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
23. november 2008 - 22:15
#1
Prøv med den her kode: #include <stdio.h> enum dir { R, L }; void shift(int bits, unsigned char *from, unsigned char *to, int n, enum dir rl) { int i; if(rl == L) { for(i = 0; i < n; i++) { to[i] = (from[i] << bits) | ((i < n-1 ? from[i+1] : 0) >> (8 - bits)); } } else { for(i = 0; i < n; i++) { to[i] = (from[i] >> bits) | ((i >= 0 ? from[i-1] : 0) << (8 - bits)); } } } int main() { int i; unsigned char before[9] = { 0x04, 0xAA, 0x20, 0x04, 0xAA, 0x20, 0x04, 0xAA, 0x20 }; unsigned char after[9]; unsigned char afterafter[9]; for(i = 0; i < 9; i++) printf(" %02x", before[i]); printf("\n"); shift(4, before, after, 9, L); for(i = 0; i < 9; i++) printf(" %02x", after[i]); printf("\n"); shift(4, after, afterafter, 9, R); for(i = 0; i < 9; i++) printf(" %02x", afterafter[i]); printf("\n"); return 0; }