развернуть байт (изменение порядка следования бит)
- Войдите на сайт для отправки комментариев
Втр, 23/04/2013 - 22:47
как можно быстро "развернуть" байт?
к примеру, есть B11000000 - как сделать из него B00000011 (т.е. чтобы самый младший бит стал самым старшим, а самый младший - самым старшим)?
Если скорость пофиг, то можно циклом. Если быстро, то уже давно есть такой способ.
x = ((x & 0x55) << 1) | ((x & 0xAA) >> 1);
x = ((x & 0xCC) >> 2) | ((x & 0x33) << 2);
x = (x >> 4) | (x << 4);
В общем случае - простым циклом
В частном случае, напрммер при передаче по SPI может оказаться, что это вовсе не нужно, а нужно лишь установить параметр MSBFIRST/LSBFIRST.
ой.. посыпаю голову пеплом.. задачка стояла как раз при работе через SPI
функцию SPI.setBitOrder() проглядел...
Если скорость пофиг, то можно циклом. Если быстро, то уже давно есть такой способ.
x = ((x & 0x55) << 1) | ((x & 0xAA) >> 1);
x = ((x & 0xCC) >> 2) | ((x & 0x33) << 2);
x = (x >> 4) | (x << 4);
у меня не заработал на нем скетч.
помогла только такая комбанация найденная в сети
и в чем разница, кроме как в &0x0F ?
при условии, что х - восьми разрядный оба способа должны дать одинаковый результат.
отож.
или у кого-то байт не восьмиразрядный?