Posted By: Neuromancer (... bright eyes ...) on 'CZprogram' Title: Re: posuv v ramci 6 bytu (c) Date: Wed Feb 2 23:04:38 2005 > > > Hmm, asi nejak takhle by to melo fungovat > > unsigned char* data; > > for ( int i=0; i<length-1; ++i ) { > > data[i] = ( data[i]<<1 ) | ( data[i+1]>>7 ); > > } > > data[length-1] <<= 1; > > > > Snad jsem se neupsal :) > > Jo, az na, ze me jde o to, aby se to prelozilo co nejeefektivneji, > coz znamena jednu rotaci vlevlo na kazdy byte. > Takhle mi jich to (pokud prekladac nebude opravdu genitalni, coz > pochybuju) udela na kazdy byte 8 (ten mikrochip neumi jiny rotace, > nez o 1 bit). Pokud ten mikrochip umi rychle pristupovat na jednotlive bajty, tak muzes zkusit neco na zpusob uint16 shifted; //unsigned short nebo co funguje na tvem kompilatoru unsigned char* shifted2 = &shifted; for ( int i=0; i<length-1; ++i ) { shifted2[1] = data[i]; //pro LSB stroje, jinak prohod 1 a 0 shifted2[0] = data[i+1]; shifted<<=1; data[i] = shifted2[1]; } data[length-1] <<= 1; Ale nevim, jak moc pekne (nebo hnusne) to ten kompilator zoptimalizuje (mozna by bylo lepsi udelat misto toho alias pointeru union). Nicmene jestli je ten mikrochip opravdu hodne pomaly tak bude lepsi zkusit assembler. > No nic, asi se budu muset jit naucit vnoreny assembler do gcc... > co jsem zatim videl to moc vabne nevypada :((( > > > Chomer > > Hodlam vytmavovat. --------------------------------------------------------------------/ | ICQ 20529980 Neuromancer | | Take me far away, where the dragons fly, | /------------ leave me to my dreams, or just let me die. ------------