将数据的指定位置置位

  • 引言
  • 实现过程
    • 如何实现数组形式的数据的置位
    • 函数的封装
    • 扩展
  • 结语

引言

在C语言的编程下,我们会经常遇到将数据的某一位置为0或者1的情况,在常用数据(char、int、long)的情况下比较简单,按位与或者按位或就可以进行将某位置1与置0了。但是如果数据是128位的或者256位的,例如:unsigned char[32],在这样的情况下就比较麻烦了。

实现过程

如何实现数组形式的数据的置位

在我们不知道数据具体的长度的时候,我们可以想到将数据统一转换成unsigned char *的形式,这样无论是什么类型的数据,或者是数组,都可以进行相应的置位了,具体的实现:

  1. 定义数据: *ungined char data;int pos;
  2. 具体实现:** data[pos/8] |= (0x01<<(pos%8)); **

函数的封装

对于常用的方法,我们肯定要封装成对应得函数,这样才能提高我们的复用率,才能不断的让我们进步。

  1. 将数据的某一位置1:
/**@fn        * @brief 将数据的某一位置1* @param[in]     pos   要修改bit数据的位置* @param[in/out] data  输入的数据和修改后返回的数据* @return */
void set_bit(unsigned char *data, unsigned int pos)
{data[pos/8] |= (0x01<<(pos%8));
}
  1. 将数据的某一位置0:
/**@fn        * @brief 将数据的某一位置0 * @param[in]     pos   要修改bit数据的位置* @param[in/out] data  输入的数据和修改后返回的数据* @return */
void clr_bit(unsigned char *data, unsigned int pos)
{data[pos/8] &= (~(0x01<<(pos%8)));
}

扩展

有了基础的按位置1和置0的操作,就可以扩展出其他的常用的操作,例如将数据的第3~9位置1,这样我们也能快速的写出对应的操作:

/**@fn        * @brief 设置数据某些位的数据  * @param[in]     pos   要修改bit数据的起始bit位置* @param[in]     count 要修改bit位的个数* @param[in]     val   要修改bit位的值,0:bit置0; 1:bit置1* @param[in/out] data  输入的数据和修改后返回的数据* @return */
void modify_bits(unsigned char *data, unsigned int pos, unsigned int count, unsigned char val)
{int i;unsigned int end_pos;end_pos = pos + count;for (i = pos; i<end_pos; i++){val ? set_bit(data, i) : clr_bit(data, i);}
}

结语

记录代码,让编程更精彩。

将数据的指定位置置位相关推荐

  1. python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序

    我有一个名为df的数据框,其中包含以下列数据标题: date A B C D E F G H I 07/03/2016 2.08 1 NaN NaN 1029 2 2.65 4861688 -0.03 ...

  2. 汇编语言 段前缀的使用 复制内存单元数据到指定位置

    题目要求 将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中 分析 0:200~0:20b可以转化为0200:0~0200:b 执行结果 代码 ;将内存ffff:0~fff ...

  3. python更改数据框指定位置的数据_python – 更改数据框中多个loc的最快方法

    我有一个包含100万行的pandas数据帧.我想用另一组值替换列中900,000行的值.有没有for循环(我需要两天才能完成)的快速方法吗? 例如,查看此示例数据框,其中我已将100万行压缩为8行 i ...

  4. python更改数据框指定位置的数据_python-如何使用来自另一个数据框的新值更新pyspark数据框?...

    我有两个Spark数据框: 数据框A: |col_1 | col_2 | ... | col_n | |val_1 | val_2 | ... | val_n | 和数据框B: |col_1 | co ...

  5. C语言实现文件的局部修改,C语言:在文件的指定位置实现局部修改,而无需重写文件的其他部分...

    前言(可跳过) 在进行大型文件的读写操作时,若采用读打开文件a,再将"a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容"保存到文件b,关闭并删除文件a,将文件 ...

  6. pandas在dataframe指定位置添加新的数据列、使用insert函数

    pandas在dataframe指定位置添加新的数据列.使用insert函数 目录 pandas在dataframe指定位置添加新的数据列.使用insert函数 #仿真数据

  7. python处理表格数据-python读取word 中指定位置的表格及表格数据

    1.Word文档如下: 2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specT ...

  8. python读取word指定内容_python读取word 中指定位置的表格及表格数据

    1.Word文档如下: 2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specT ...

  9. js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素...

    JS定义了一个json数据var test={name:"name",age:"12"};需要给test再添加一个字段,需要什么办法,可以让test的值为{na ...

最新文章

  1. java的InputStream和OutputStream的理解【转】
  2. php 点击删除数据,使用php脚本删除数据
  3. 人类无法抗拒的10种心理(转)
  4. python百题百练 二级题目_CSDN Python语感百题(一)
  5. LeetCode 43字符串相乘44通配符匹配
  6. 限制外来计算机访问,准入网关|网络准入控制|非法接入检测|限制非法访问解决方案...
  7. Scrapy爬取美女图片续集 (原创)
  8. 云上的数据安全,是企业互联网化发展的生命线!
  9. @程序员,如何在五分钟内构建个人网盘服务?| 技术头条
  10. bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
  11. java 正则regex_Java中的正则表达式– Java Regex示例
  12. sqlsever主库从库如何切换_面试最让你手足无措的一个问题:你的系统如何支撑高并发?...
  13. 赤兔CMS(CTCMS)V2.0.6版更新了后台模板样式
  14. 将时谐电磁场引入工程电磁场的意义_电磁场思考题
  15. boost noncopyable实现与ADL
  16. Oracle 增加USERS表空间
  17. 在虚拟机中ping了停不下来怎么办?
  18. c++ 统计指定字母开头单词的数量
  19. caffe调用之前的权重和接着断点继续训练
  20. 大师级管理人物盘点:“颠覆性技术“提出者-克里斯坦森

热门文章

  1. 华为云计算之ebackup备份原理
  2. ubuntu 系统环境配置记录
  3. Markdown结合html表格标签制作简历模板
  4. GRC结合Hackrf 实现GFSK文本传输
  5. 一个跑酷小游戏的项目总结
  6. Comparison of online algorithms for the tracking of multiple magnetic targets in a myokinetic contro
  7. 【THREE.JS】网页中的炫酷3D
  8. H3C认证培训实验10 ARP
  9. 【 Qt编写一个串口助手】
  10. ROS下的人体姿态识别tf-pose-estimation(tensorflow版本的openpose)