【Cpp】位图Bitmap

  • code
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdint.h>class Bitmap
{
private:std::vector<uint8_t> data; // 存储位图数据的字节数组uint32_t size;             // 位图的大小(以位为单位)public:// 构造函数Bitmap(uint32_t size) : size(size){uint32_t byteSize = (size + 7) / 8;data.resize(byteSize, 0); // 初始化数据为0}// 设置或清除指定位的值int setBit(uint32_t pos, bool value){if (pos < 0 || pos >= size){std::cerr << "Invalid bit position: " << pos << std::endl;return -1;}int bytePos = pos / 8;int bitPos = pos % 8;if (value){data[bytePos] |= (1 << bitPos); // 设置为1}else{data[bytePos] &= ~(1 << bitPos); // 清除为0}return 0;}// 检查指定位是否为1bool getBit(uint32_t pos) const{if (pos < 0 || pos >= size){std::cerr << "Invalid bit position: " << pos << std::endl;return 0;}int bytePos = pos / 8;int bitPos = pos % 8;return (data[bytePos] & (1 << bitPos)) != 0;}// 打印位图的每一位void printBitmap(void){printf("Bitmap :\n");for (int i = 0; i < size; i++){printf(" %.2d:%d |", i, getBit(i));if ((0 == ((i + 1) % 8)) && (0 != i)){printf("\n");}}printf("\n");}// 读取数据从位图的指定字节起始位置int readData(uint32_t startByte, uint8_t *data, uint32_t dataSize) const{uint32_t bitmapByteSize = (size + 7) / 8;if (startByte < 0 || (startByte + dataSize) > bitmapByteSize){std::cerr << "Invalid start byte position or data size: " << startByte << std::endl;return -1;}for (uint32_t i = 0; i < dataSize; i++){uint32_t bytePos = startByte + i;data[i] = this->data[bytePos];std::cout << "readData bytePos [" << bytePos << "] data[" << (int)data[i] << "]" << std::endl;}return 0;}// 写入数据到位图的指定字节起始位置int writeData(uint32_t startByte, const uint8_t *data, uint32_t dataSize){uint32_t bitmapByteSize = (size + 7) / 8;if (startByte < 0 || (startByte + dataSize) > bitmapByteSize){std::cerr << "Invalid start byte position or data size: " << startByte << std::endl;return -1;}for (uint32_t i = 0; i < dataSize; i++){uint32_t bytePos = startByte + i;this->data[bytePos] = data[i];std::cout << "writeData bytePos [" << bytePos << "] data[" << (int)data[i] << "]" << std::endl;}return 0;}
};int main()
{uint32_t bitmapSize = 32; // 设置位图大小Bitmap bitmap(bitmapSize);// 设置一些位bitmap.setBit(8, true);bitmap.setBit(9, true);bitmap.setBit(18, true);// 打印位图的每一位bitmap.printBitmap();// 清除位bitmap.setBit(18, false);std::cout << "Bit 18 is set after clearing: " << bitmap.getBit(18) << std::endl;// 打印位图的每一位bitmap.printBitmap();uint8_t dateRead = 0;bitmap.readData(1, &dateRead, sizeof(dateRead));std::cout << "dateRead [" << (int)dateRead << "]" << std::endl;uint8_t dateWrite = 0xFF;bitmap.writeData(0, &dateWrite, sizeof(dateWrite));bitmap.printBitmap();return 0;
}
  • test在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/116314.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据从入门到精通(超详细版)之Hive的案例实战,ETL数据清洗!!!

前言 嗨&#xff0c;各位小伙伴&#xff0c;恭喜大家学习到这里&#xff0c;不知道关于大数据前面的知识遗忘程度怎么样了&#xff0c;又或者是对大数据后面的知识是否感兴趣&#xff0c;本文是《大数据从入门到精通&#xff08;超详细版&#xff09;》的一部分&#xff0c;小…

基于FPGA的图像直方图统计实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、图像数据传输 4.2、直方图统计算法 4.3、时序控制和电路设计 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescal…

使用 PyTorch 的计算机视觉简介 (5/6)

一、说明 本文主要介绍CNN中在pytorch的实现&#xff0c;其中VGG16网络&#xff0c;数据集来源&#xff0c;以及训练过程&#xff0c;模型生成和存储&#xff0c;模型调入等。 二、预训练模型和迁移学习 训练 CNN 可能需要大量时间&#xff0c;并且该任务需要大量数据。但是&am…

Qt5开发及实例V2.0-第十八章-Qt-MyselfQQ实例

Qt5开发及实例V2.0-第十八章-Qt-MyselfQQ实例 第18章-Qt MyselfQQ18.1 概述18.2 、发送文件18.3 、接收文件18.4 、保证传输的安全和稳定18.5 、总结 本章相关例程源码下载1.Qt5开发及实例_CH1801.rar 下载 第18章-Qt MyselfQQ 18.1 概述 MyselfQQ是一个基于Qt5框架开发的轻量…

如何快速走出网站沙盒期(关于优化百度SEO提升排名)

网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名&#xff0c;甚至被完全忽略的现象。这个现象往往发生在新建立的网站上&#xff0c;因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期&#xff0c;需要优化百度SEO。以下是5个…

【再识C进阶3(上)】详细地认识字符串函数、进行模拟字符串函数以及拓展内容

小编在写这篇博客时&#xff0c;经过了九一八&#xff0c;回想起了祖国曾经的伤疤&#xff0c;勿忘国耻&#xff0c;振兴中华&#xff01;加油&#xff0c;逐梦少年&#xff01; 前言 &#x1f493;作者简介&#xff1a; 加油&#xff0c;旭杏&#xff0c;目前大二&#xff0c;…

平均精度(AP)

什么是平均精度(AP) 平均精度 (AP)并不是精度 (P)的平均值。 平均精度 (AP) 是按类别计算的。 mAP&#xff08;mean average precision&#xff09;是一个平均值&#xff0c;常用作目标检测中的检测精度指标mAP 指标通过对于一个平均目标来检测任务中多个目标所对应不同 AP&a…

Nginx 防止跨站脚本 Cross-Site Scripting (XSS)

1、修改 nginx 配置 在 nginx.conf 配置文件中&#xff0c;增加如下配置内容&#xff1a; add_header X-XSS-Protection "1; modeblock";X-XSS-Protection 的字段有三个可选配置值&#xff0c;说明如下&#xff1a; 0&#xff1a; 表示关闭浏览器的XSS防护机制&…

(1) ESP32获取图像,并通过电脑端服务器显示图像

目录​​​​​​​ 一、所需器件工具 二、客户端与服务器进行UDP通信 1、客户端代码 2、服务器端代码 3、效果展示 三、客户端拍照&#xff0c;通过UDP传输到服务器进行显示 1、客户端获取图像并UDP传输 2、电脑端服务器显示图像 3、效果展示 四、代码链接 一、所需器…

rk3568环境配置和推理报错: RKNN_ERR_MALLOC_FAIL

前言 最近在部署算法在板子侧遇到的一些问题汇总一下&#xff1a; 一、版本问题 经过测试现在将自己环境配置如下&#xff1a; 本地linux安装rknn-toolkit2-1.5.0 本地Linux使用的miniconda新建的一个python虚拟环境&#xff08;自行网上查找相关方法&#xff09; 安装好自…

Linux 链表示例 LIST_INIT LIST_INSERT_HEAD

list(3) — Linux manual page 用Visual Studio 2022创建CMake项目 * CmakeLists.txt # CMakeList.txt : Top-level CMake project file, do global configuration # and include sub-projects here. # cmake_minimum_required (VERSION 3.12)project ("llist")# I…

【Linux】系统编程线程读写者模式(C++)

目录 一、读写锁 二、读写锁接口 【2.1】设置读写优先 【2.2】初始化 【2.3】销毁 【2.4】加读锁 【2.5】加写锁 【2.6】解锁 三、读写锁实例 一、读写锁 在编写多线程的时候&#xff0c;有一种情况是十分常见的。那就是&#xff0c;有些公共数据修改的机会比较少。相…