原创 字节反转程序

2007-3-4 19:23 4593 5 6 分类: 软件与OS

                 字节反转程序 


字节反转(字节颠倒)是一种经常用到的子程序,这里对常见的几种方法进行了对比,并进行了简单的测试。

// ---------------------------------------------------------
// 
方法1:用较小的查找表来实现

// 
优点:在PC上执行时,速度很快,且占有空间很小

// 
缺点:在MCU中执行,由于对数组的寻址,导致运算量很大

// ---------------------------------------------------------
BYTE ByteInvert1( BYTE chSrc )
{
    BYTE chInvTable[16] = { 0x00, 0x08, 0x04, 0x0C,
      0x02, 0x0A, 0x06, 0x0E,
      0x01, 0x09, 0x05, 0x0D,
      0x03, 0x0B, 0x07, 0x0F };
    BYTE chDst; 
    chDst = (chInvTable[chSrc&0x0F] << 4) +
     chInvTable[chSrc>>4];   



    return chDst;
}
// ---------------------------------------------------------
// 

方法2:按位直接映射
// 
优点:直观,高效

// 
缺点:

// ---------------------------------------------------------
BYTE ByteInvert2(BYTE chSrc )

    BYTE chDst=0;
 
    if ( chSrc & 0x80 ) chDst |= 0x01; 
    if ( chSrc & 0x40 ) chDst |= 0x02; 
    if ( chSrc & 0x20 ) chDst |= 0x04;
    if ( chSrc & 0x10 ) chDst |= 0x08;
    if ( chSrc & 0x08 ) chDst |= 0x10;
    if ( chSrc & 0x04 ) chDst |= 0x20; 
    if ( chSrc & 0x02 ) chDst |= 0x40; 
    if ( chSrc & 0x01 ) chDst |= 0x80;
 
    return(chDst);

// ---------------------------------------------------------
// 
方法3:逐位判断赋值

// 
优点:直观,效率较高

// 
缺点:代码较多

// ---------------------------------------------------------
BYTE ByteInvert3( BYTE chSrc)
{
    BYTE chDst;
 
    chDst = chSrc&1;
 
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
    chDst<<=1, chSrc>>= 1, chDst|=chSrc&1;
 
    return chDst;
}

// ---------------------------------------------------------
// 
方法4:逐位判断赋值

// 
优点:直观,代码较少

// 
缺点:由于使用了循环,效率较低

// ---------------------------------------------------------
BYTE ByteInvert4( BYTE chSrc )
{
    BYTE i, chDst;
 
    chDst = chSrc&1;
 
    for( i=0; i<7; i++)
     chDst<<=1, chSrc>>=1, chDst|=chSrc&1;       
 
    return chDst;
}

试验:

 
MSP430中进行仿真试验,得到的数据如下:

---------------------------------------------------------
   
方法  执行时间(周期数占用空间(字节
)
---------------------------------------------------------
  
方法
1      219       62
  
方法
2       33       68
  
方法
3       49       92
  
方法
4      103       32






结论:
   
从执行时间和占用空间两方面考虑,通常情况下,在MCU中最好采用方法2。在PC上,或是在执行时间、占有空间上有特殊要求的情况下,则另当别论。

Sun Mar 4 2007 


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

19:22:09 UTC+0800


 

文章评论1条评论)

登录后参与讨论

用户377235 2013-11-24 01:49

这个似乎应该叫做“同字节内位反转”,而不是字节反转
相关推荐阅读
用户1415076 2007-04-04 22:16
CD40106BC触发器
Wed Apr 4 200722:15:39 UTC+0800 ...
用户1415076 2007-03-30 22:46
电容器的检测
1固定电容器的检测 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />       ...
用户1415076 2007-03-26 22:18
利用DSP控制无刷直流电机
Mon Mar 26 200722:18:53 UTC+0800...
用户1415076 2007-03-26 22:15
基于模糊模型的预测PID控制器参数整定
Mon Mar 26 200722:15:30 UTC+0800...
用户1415076 2007-03-23 21:10
自由度和广义坐标
            自由度和广义坐标  在任意坐标系中,要确定一个物体的位置所确定独立坐标的数目,称为这个物体的运动自由度。比如:质点作直线运动或者沿着空间已知曲线运动时,只要知道质点沿弧线所走过...
用户1415076 2007-03-19 22:11
怎样克服摩擦对伺服系统的影响
           怎样克服摩擦对伺服系统的影响  伺服系统多数是执行电动机拖动传动机构及控制对象进行机械运动,在传动过程中不可避免存在摩擦,反映在传动轴上就是摩擦力矩.其又分为粘性摩擦,静摩擦和库...
我要评论
1
5
关闭 站长推荐上一条 /2 下一条