原创
字节反转程序
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
用户377235 2013-11-24 01:49