Boвa (13.07.2018 22:07 - 14.07.2018 00:35, просмотров: 115) ответил 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]));
}
Если есть макросы доступа к байтам используйте их вместо конструкций с адресами