c语言实现bitmap的基本操作
1 /** 2 *文件:bit.h 3 *目的: 实现bitmap数据结构 4 *作者:杜小波 5 *联系方式:code2living@gmail.com 6 **/ 7 8 #ifndef _BIT_H_ 9 #define _BIT_H_ 10 11 /** 12 *存储bitmap的结构体 13 *存储的顺序从左至右 14 **/ 15 struct _Bits; 16 typedef struct _Bits *bits; 17 18 /** 19 *获得bitmap 20 *@length bitmap的长度 21 *@return 所有位都初始化为0的bitmap 22 */ 23 bits bit_new(unsigned int length); 24 25 /** 26 *销毁一个bitmap 27 **/ 28 void bit_destroy(bits bit); 29 30 /** 31 *获得y一个bitmap的长度 32 *@bit 需要获得长度的bitmap 33 *@return bit的长度 34 **/ 35 unsigned int bit_length(bits bit); 36 37 /** 38 *设置bitmap中相应位置的值 39 *@bit 待设置的bitmap 40 *@pos 需要设置的位置 41 **/ 42 void bit_set(bits bit, unsigned int pos, unsigned char value); 43 44 /** 45 *设置bitmap中相应位置的值 46 *@bit 待获取的bitmap 47 *@pos 获取的位置 48 **/ 49 char bit_get(bits bit, unsigned int pos); 50 51 #endif /*_BITS_H_*/
#include "bit.h" #include <stdio.h> #include <stdlib.h> #include <string.h>struct _Bits {char *bits;unsigned int length; };bits bit_new(unsigned int length) {bits new_bits = (bits)malloc(sizeof(struct _Bits));if (new_bits == NULL)return NULL;int char_nums = sizeof(char) * (length >> 3) + 1;new_bits->bits = (char *)malloc(char_nums);if (new_bits == NULL) {free(new_bits);return NULL;}memset(new_bits->bits, 0, char_nums);new_bits->length = length;return new_bits; }void bit_destroy(bits bit) {free(bit->bits);free(bit); }unsigned int bit_length(bits bit) {return bit->length; }void bit_set(bits bit, unsigned int pos, unsigned char value) {unsigned char mask = 0x80 >> (pos & 0x7);if (value) {bit->bits[pos>>3] |= mask;} else {bit->bits[pos>>3] &= ~mask;} }char bit_get(bits bit, unsigned int pos) {unsigned char mask = 0x80 >> (pos & 0x7);return (mask & bit->bits[pos>>3]) == mask ? 1 : 0; }
1 #include <stdio.h> 2 #include "bit.h" 3 #define LEN 15 4 int main(void) 5 { 6 bits bit = bit_new(LEN); 7 8 printf("length: %u\n", bit_length(bit)); 9 10 unsigned int test_value = 0x735D; 11 unsigned char value; 12 int i; 13 for (i = LEN - 1; i >= 0; i--) { 14 value = test_value & 1; 15 bit_set(bit, i, value); 16 test_value >>= 1; 17 } 18 19 for (i = 0; i < LEN; i++) { 20 printf("%d", bit_get(bit, i)); 21 } 22 printf("\n"); 23 24 bit_destroy(bit); 25 26 return 0; 27 }
欢迎大家对小弟的作品进行挑错
转载于:https://www.cnblogs.com/chunxia/archive/2013/04/28/3049243.html
c语言实现bitmap的基本操作相关推荐
- C语言中文件的基本操作函数fprintf和fscanf实例介绍
C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...
- 大连东软c语言编程题,大连东软信息学院C语言实验一 windows基本操作和turboc使用答案.doc...
大连东软信息学院C语言实验一 windows基本操作和turboc使用答案 实验一 Windows基本操作及Turbo C2.0编译环境 一.实验目的 1.熟悉Windows操作系统的基本操作,如文件 ...
- C语言循环队列的基本操作(init,enquene,dequene)与杨辉三角(C和C++<queue>)
C语言循环队列的基本操作与杨辉三角(C和C++的表示方法) C语言的表示方法 #include <stdio.h> #include <malloc.h> #define ma ...
- c语言如何标志置1与置0,c语言对于文本的基本操作
字符读写函数 :fgetc和fputc 字符串读写函数:fgets和fputs 数据块读写函数:freed和fwrite 格式化读写函数:fscanf和fprinf 1.字符读写: fgetc函数的 ...
- C语言实现单链表基本操作
C语言实现单链表基本操作的 目录
- C语言实现环形队列基本操作
C语言实现环形队列基本操作(以简单排队问题为例) 通过调用简单函数实现顺序表的相关操作.代码编译环境为VS2019 16.9.4.因为VS的某些原因,scanf写为了scanf_s,作用是一样的,在其 ...
- 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验
实验三 二叉树基本操作与应用实验 第三次实验主要包括两部分内容:1.二叉树基本操作实验:2.二叉树应用-赫夫曼树与赫夫曼编码实验.基本操作包括存储结构建立和遍历算法,本文只给出部分参考程序,请大家尽量 ...
- 【算法与数据结构专场】BitMap算法基本操作代码实现
上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...
- c语言 字符串map,C语言实现BitMap
BitMap的原理不用多说了. 主要说下位操作. 我们假设每个基础存储单元为char,则BYTESIZE = 8,如果为int则16 or 32. 当设置i时,首先ptr+=i/BYTESIZE,到达 ...
最新文章
- spring Batch实现数据库大数据量读写
- windows服务安装
- 9月份计算机应用基础统考,2018年9月计算机应用基础统考题库-网考计算机应用基础真题1...
- python用什么系统好_10分钟用python搭建一个超好用的CMDB系统
- OSPF Packet Details
- 呕心沥血 JavaScript知识点梳理大全,超详细 建议收藏!!!
- 使用特殊字体实现特殊报表效果
- 培训loadrunner感受
- java实现qq抢红包_java实现抢红包算法(公平版和手速版)
- 黑莓手机刷linux,【教程】黑莓手机 BlackBerry DM6.0 完整刷机教程 含瘦身方法...
- editplus显示FTP服务器连接,EditPlus3 FTP 设置对话框
- 内外网同时运行路由设置
- Devops知识技能树(译)
- 数据库学习7 — 嵌套查询
- PHP的优势是什么?
- Linux手机众筹1000万
- [转载]CAE工程师:铁匠还是厨子,这是个问题
- ibm aix 抓包命令_在IBM AIX上模拟丢弃的TCP / IP数据包
- LaTeX之使用parcolumns宏包实现双栏排版示例
- 超级详细的 shell编程知识讲解 —— 第二部分(全文3万多字,看完之后不想成为高手也难!)
热门文章
- 利用hutool实现邮件发送功能
- 10打开没有反应_【专利】表面施胶剂的反应装置
- 用WSL安装Docker镜像
- c语言除法在全局区,深入C语言内存区域分配(进程的各个段)详解
- oracle 提取连续数字,oracle 得到连续不重复的数字序列
- python mssqlserver_python for MSSQLserver
- MultipartFile与File之间的相互转换
- Layui--弹出层layer
- spring配合Junit进行单元测试
- 11年亚锦赛球员数据_2020年11月楼市数据更新!全美房屋中间价持续上涨