直接上源码:
//.h
#ifndef BITSMANAGER_H
#define BITSMANAGER_H
#include <qglobal.h>
class BitsManager
{
public:
BitsManager();
//指定某一位为1 位编号[0~31]
static quint32 setBit1(quint32 value,int bitNum);
//指定某一位为0 位编号[0~31]
static quint32 setBit0(quint32 value,int bitNum);
//指定某一位取反
static quint32 setBitReverse(quint32 value,int bitNum);
//获取某一位的值
static quint32 getBit(quint32 value,int bitNum);
//获取单字节 [0~3]
static quint32 getByte(quint32 value,int byteNum);
//清零某个字节[0~3]
static quint32 setByte0(quint32 value,int byteNum);
//置某个字节为1 [0~3]
static quint32 setByte1(quint32 value,int byteNum);
};
#endif // BITSMANAGER_H
//.cpp
#include "BitsManager.h"
BitsManager::BitsManager()
{
}
quint32 BitsManager::setBit1(quint32 value, int bitNum)
{
return value|(1<<bitNum);
}
quint32 BitsManager::setBit0(quint32 value, int bitNum)
{
return value&=~(1<<bitNum);
}
quint32 BitsManager::setBitReverse(quint32 value, int bitNum)
{
return value^=(1<<bitNum);
}
quint32 BitsManager::getBit(quint32 value, int bitNum)
{
return (value)>>(bitNum)&1;
}
quint32 BitsManager::getByte(quint32 value, int byteNum)
{
quint32 ret = 0;
if(byteNum == 0)
ret = (value>>0) & 0x000000ff;
else if(byteNum == 1)
ret = (value>>8) & 0x000000ff;
else if(byteNum == 2)
ret = (value>>16) & 0x000000ff;
else if(byteNum == 3)
ret = (value>>24) & 0x000000ff;
return ret;
}
quint32 BitsManager::setByte0(quint32 value, int byteNum)
{
quint32 ret = 0;
if(byteNum == 0)
ret = value &= 0xffffff00;
else if(byteNum == 1)
ret = value &= 0xffff00ff;
else if(byteNum == 2)
ret = value &= 0xff00ffff;
else if(byteNum == 3)
ret = value &= 0x00ffffff;
return ret;
}
quint32 BitsManager::setByte1(quint32 value, int byteNum)
{
quint32 ret = 0;
if(byteNum == 0)
ret = value |= 0x000000ff;
else if(byteNum == 1)
ret = value |= 0x0000ff00;
else if(byteNum == 2)
ret = value &= 0x00ff0000;
else if(byteNum == 3)
ret = value &= 0xff000000;
return ret;
}