[分享]找了好久没找到高低位互换的例子,自己琢磨着编了一个

2020-01-22 12:15发布

想把1个字节8位高低位互换,即0-7,1-6,2-5,3-4分别互换。
这个在某些情况需要用到。
网上找了一些例子,发现有的不能使用,有的明显就是错的。
无奈自己编了一个,如下:

unsigned char LSBMSB(unsigned char dat)//字节高低位互换
{
  unsigned char i,temp=0;
  for(i=0;i<8;i++)
  {
    if(dat&(1<<(7-i)))
    {
      temp|=(1<<i);
    }
  }
  return temp;
}

推导过程:
if(dat&(1<<7)) temp|=(1<<0);
if(dat&(1<<6)) temp|=(1<<1);
if(dat&(1<<5)) temp|=(1<<2);
if(dat&(1<<4)) temp|=(1<<3);
if(dat&(1<<3)) temp|=(1<<4);
if(dat&(1<<2)) temp|=(1<<5);
if(dat&(1<<1)) temp|=(1<<6);
if(dat&(1<<0)) temp|=(1<<7);

测试了一下可以使用。依此可以很容易推导出16位,32位的互换函数。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。