harryqiu 发表于 2012-2-21 11:21:31

求问如何实现把一个8bit数据的LSB位和MSB位互换位置

我现在要实现把一个8bit数据的LSB和MSB位互换位置(如原数据是0x55,转换完后应该是0xaa)。我的代码是这样的
unsigned char change(unsigned char ch)
{
unsigned char tmp=ch;
ch=((tmp&0x01)<<7) | ((tmp&0x02)<<5) | ((tmp&0x04)<<3) | ((tmp&0x08)<<1) | ((tmp&0x10)>>1) | ((tmp&0x20)>>3) | ((tmp&0x40)>>5) | ((tmp&0x80)>>7);
return ch;
}
不过感觉这样实现代码效率太低了,求问各位高手有没有更高效的实现方法。
小弟第一次发帖,期待各位的讨论,非常感谢!

harryqiu 发表于 2012-2-21 11:36:06

回复【楼主位】harryqiu
-----------------------------------------------------------------------

自己顶一个~

貌似把这个函数变成宏定义,在效率上会略快一些,不知还有没有更好的方法。


宏定义如下
#define change(ch) ((ch&0x01)<<7) | ((ch&0x02)<<5) | ((ch&0x04)<<3) | ((ch&0x08)<<1) | ((ch&0x10)>>1) | ((ch&0x20)>>3) | ((ch&0x40)>>5) | ((ch&0x80)>>7)

harryqiu 发表于 2012-2-21 12:34:16

回复【楼主位】harryqiu
-----------------------------------------------------------------------

额。。。每人鸟我啊。。。
再顶一个~
页: [1]
查看完整版本: 求问如何实现把一个8bit数据的LSB位和MSB位互换位置