• Qt 自定义位操作类


    1.自己封装了一个位操作、字节操作简单的类,仅供参考

    直接上源码:

    //.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;
    }

  • 相关阅读:
    适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序
    mysql为什么用b+树
    基于SpringBoot和Vue的厨到家服务平台的设计与实现毕业设计源码063133
    C#,哈密顿环问题(Hamiltonian Cycle problem)的算法与源程序
    Selenium 前世今生
    数字游戏
    C基础-数组
    Linux软件管理
    智慧城市的发展趋势
    Oracle Primavera P6V7 SQL异常案例
  • 原文地址:https://blog.csdn.net/wzz953200463/article/details/125508721