ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
855867 Топик полностью
Boвa (13.07.2018 22:07 - 14.07.2018 00:35, просмотров: 108) ответил mut на А для не unsigned char, хотя бы для unsigned short, как ваша функция Reverse() будет выглядеть?
Для 16 бит и 32 бит. Дальше по аналогии с 32 битником UPD Умный компилятор сам бы должен разворачивать сдвиги больше 8 бит в обмен байтами, но не всякий так делает. Поэтому реверсируем биты в границах байта, а потом просто меняем байты местами. Конечно это не лучший вариант, гораздо лучше такое писать на асме используя все доступные регисты. Функция byte Reverse(byte X) была выше typedef byte* pbyte; typedef short* pshort; typedef int* pint; short int Reverse16(short int &X) { byte Y[2]; pbyte A = pbyte(&X); Y[1] = Reverse(*(A+0)); Y[0] = Reverse(*(A+1)); return *(pshort(Y)); } int Reverse32(int &X) { byte Y[4]; pbyte A = pbyte(&X); byte i,j=3; for(i=0;i<4;i++,j--) {Y[i] = Reverse(*(A+j));} return *(pint(&Y[0])); } Если есть макросы доступа к байтам используйте их вместо конструкций с адресами