Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1037952
  • 博文数量: 264
  • 博客积分: 6005
  • 博客等级: 大校
  • 技术积分: 2798
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 20:15
文章分类

全部博文(264)

文章存档

2011年(42)

2010年(213)

2009年(4)

2008年(2)

2007年(3)

分类: C/C++

2011-01-15 23:59:10

假设有个c语言中有个变量:    char   chValue = 0x23; 转换成二进制,就是0B:  0010 0011
有些时候,我们需要把这个位位置颠倒下,变成0B:1100 0100
反正我编程的时候有遇到这种函数。 我们可以通过查表来转换(在方法2中给出)。

方法1: 函数实现法。
1. 为了照顾一些新手我这里,给个一般的方法(不肯定不是最好的方法,也就是基本的实现,也是最笨的方法,不过有时候最笨的方法就是最好的方法(不用花时间去想,马上就可以实现)。)
  

#define BIT0            (0x01)
#define BIT1            (0x02)
#define BIT2            (0x04)
#define BIT3            (0x08)
#define BIT4            (0x10)
#define BIT5            (0x20)
#define BIT6            (0x40)
#define BIT7            (0x80)


unsigned char  
BitSwap(/*IN*/ unsigned char v)
{
    unsigned char chOutput = 0;
    
    int i = 0;
    if ( 0 != (v & BIT0) )
    {
         chOutput |= BIT7;
     }

    if ( 0 != (v & BIT1) )
    {
         chOutput |= BIT6;
     }

    if ( 0 != (v & BIT2) )
    {
         chOutput |= BIT5;
     }

    if ( 0 != (v & BIT3) )
    {
         chOutput |= BIT4;
     }

    if ( 0 != (v & BIT4) )
    {
         chOutput |= BIT3;
     }

    if ( 0 != (v & BIT5) )
    {
         chOutput |= BIT2;
     }

    if ( 0 != (v & BIT6) )
    {
         chOutput |= BIT1;
     }

    if ( 0 != (v & BIT7) )
    {
         chOutput |= BIT0;
     }

    return chOutput;
}

方法2: 查表法

// ! .h  头文件中
extern guint8 swaptab[256];

unsigned char  
BitSwap(/*IN*/ unsigned char v);


// !  .c 文件中

#include "bitswap.h"

/* "swaptab[i]" is the value of "i" with the bits reversed. */
unsigned char bitSwapTable[256] = 
{
  0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
  0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
  0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
  0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
  0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
  0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
  0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
  0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
  0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
  0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
  0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
  0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
  0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
  0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
  0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
  0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
  0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
  0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
  0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
  0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
  0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
  0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
  0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
  0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
  0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
  0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
  0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
  0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
  0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
  0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
  0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
  0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
};


unsigned char  
BitSwap(/*IN*/ unsigned char v)
    return  bitSwapTable[b];
}


或者直接用定义实现
#define BitSwap(b) (bitSwapTable[b])
    

阅读(6559) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:QT creator 技巧(转)

给主人留下些什么吧!~~