• 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;
    }

  • 相关阅读:
    Java 基础知识 V 之 基础扩展
    【云原生之k8s】kubeadm搭建k8s集群
    无涯教程-JavaScript - DDB函数
    LeetCode-1732. 找到最高海拔【前缀和,数组】
    基于 Docker 构建轻量级 CI 系统:Gitea 与 Woodpecker CI 集成
    Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】
    栈的OJ一小道-->Leetcode有效的括号
    Golang反射相关知识总结
    [SpringBoot系列]基础过渡与夯实(基础配置)
    LeetCode 刷题系列 -- 1254. 统计封闭岛屿的数目
  • 原文地址:https://blog.csdn.net/wzz953200463/article/details/125508721