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 SoftwareOne
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; }