Python读字节某一位的值,设置某一位的值,二进制位操作

  在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1、True和False、Yes和No这样的布尔值每8个只占用一个字节,用字节中的位来表示。减少传输量,减少对网络稳定性的要求。这就带来了要怎么读某个字节中每一位的值和怎么设置每一位的值的问题。

  这几天再写培训演示代码,顺便就写了两个函数,解决字节位值读写问题,现在分享给大家。

  下面直接上代码,在Python3上测试通过:

#!/usr/bin/env python
# -*- coding: utf-8 -*-def get_bit_val(byte, index):"""得到某个字节中某一位(Bit)的值:param byte: 待取值的字节值:param index: 待读取位的序号,从右向左0开始,0-7为一个完整字节的8个位:returns: 返回读取该位的值,0或1"""if byte & (1 << index):return 1else:return 0def set_bit_val(byte, index, val):"""更改某个字节中某一位(Bit)的值:param byte: 准备更改的字节原值:param index: 待更改位的序号,从右向左0开始,0-7为一个完整字节的8个位:param val: 目标位预更改的值,0或1:returns: 返回更改后字节的值"""if val:return byte | (1 << index)else:return byte & ~(1 << index)print(get_bit_val(3, 2))        # 3的2进制00000 0 11,2号位是0,打印结果0
print(get_bit_val(3, 1))        # 3的2进制000000 1 1,1号位是1,打印结果1
print(get_bit_val(3, 5))        # 3的2进制00 0 00011,5号位是0,打印结果0print(set_bit_val(3, 2, 1))     # 3的2进制00000 0 11,2号位改成1,打印结果7(00000111)
print(set_bit_val(3, 1, 0))     # 3的2进制000000 1 1,1号位改成0,打印结果1(00000001)
print(set_bit_val(3, 5, 0))     # 3的2进制00 0 00011,5号位改成0,打印结果3(00000011)"""
控制台输出:
0
1
0
7
1
3
"""

Python读字节某一位的值,设置某一位的值,二进制位操作相关推荐

  1. 前锋python百度云_关于python:使用索引在pandas DataFrame中设置特定单元格的值

    我创建了一个熊猫数据框架 df = DataFrame(index=['A','B','C'], columns=['x','y']) 得到了这个 x    y A  NaN  NaN B  NaN ...

  2. linux应用程序设置粘滞位,Linux中设置粘滞位

    关于目录有三种权限: r - -可读权限,可以列出目录下的内容(但如果要列出目录下的内容必须要能进入这个目录所需要的权限为 r-x) -w-可写权限,可以往目录里些内容(但是如果如果往目录里面些内容, ...

  3. python中指定变量为1byte_Python读字节某一位的值,设置某一位的值,二进制位操作...

    Python读字节某一位的值,设置某一位的值,二进制位操作 ??在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1.True和Fa ...

  4. python获取二进制bit位_Python读字节某一位的值,设置某一位的值,二进制位操作...

    Python读字节某一位的值,设置某一位的值,二进制位操作 在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1.True和Fals ...

  5. phpcms 后台设置 posid 推荐位(支持多选) - 教程篇

    phpcms 推荐位(作为多条件判断) - 设置教程 截图示下: 注意事项: 定义的推荐位字段如何设置? 推荐位如何排序? 发布文章如何支持多选使用? 以上就是关于" phpcms 后台设置 ...

  6. android 代码设置居右_AppCompatSpinner默认值、默认选中、更改右侧箭头颜色、选项变化监听、文本居中显示...

    1.在代码中设置spinner默认值 spinner.setSelection(2,true); 就这样一行代码,很重要 一定要加true. 2.根据值设置spinner默认选中 /** 根据值, 设 ...

  7. python读数据-Python如何读写字节数据

    问题 你想读写二进制文件,比如图片,声音文件等等. 解决方案 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: 1 2 3 4 5 6 7 # Read the ent ...

  8. python struct.pack()函数 (返回一个字节对象,其中包含根据格式字符串fmt打包的值v1,v2,...)

    def pack(fmt, *args): # known case of _struct.pack"""pack(fmt, v1, v2, ...) -> byt ...

  9. 把ax中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一段程序,要求数一下值为3(即11B)的的四分之一字节数,并将该数在终端上显示出来。

    把ax中存放的16位二进制数K看作是8个二进制的"四分之一字节".试编写一段程序,要求数一下值为3(即11B)的的四分之一字节数,并将该数在终端上显示出来. DATA SEGMEN ...

最新文章

  1. 院士 人工智能专业理解
  2. 使用访问器属性模拟java中的私有变量
  3. 更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性
  4. 【刷题】BZOJ 4195 [Noi2015]程序自动分析
  5. SSH远程管理OpenSSH使用
  6. 大型企业的特色服务【我身边的戴尔企业级解决方案】
  7. 串口扫盲十三:接口技术的基本知识
  8. SwitchResX Mac屏幕分辨率调整工具
  9. 聊天工具机器人开发_聊天机器人-精致的交流工具? 还是您的客户服务团队不可或缺的成员?...
  10. RH850F1L 移植freeRTOS
  11. 使用labview制作漂亮的按钮
  12. 数据结构链表(C语言实现)
  13. JAVA事务@Transactional之propagation
  14. 2023年深圳技能大赛——大鹏新区潮式风味菜烹饪职业技能竞赛
  15. 使用浏览器传感器工具测试手机陀螺仪效果
  16. 手持弹幕android制作,手持弹幕神器
  17. Odoo与浪潮合资研发PS Cloud之如何在Odoo中进行搜索引擎优化(5)
  18. LINUX下,C语言MALLOC可能达到的最大空间测试
  19. 欧文分校计算机新sat多少分录取,加州大学欧文分校留学托福成绩要求95分 SAT1800分...
  20. 软件测试自我评价范文,软件测试工程师自我评价范文

热门文章

  1. 创新设计糕点品牌推广策划书简约PPT模板
  2. 搭建实验室多人共用服务器
  3. 信息安全等级保护分为几个级别?最高级别是什么?
  4. 微信报名系统于商家,于用户有何作用?
  5. 元宇宙:一场虚拟空间的跃迁
  6. 目标跟踪——OTB平台的Python版tracker使用
  7. 解决chrome浏览器中鼠标滚轮滚动事件失效的问题
  8. STM32F429IGT6入门(一)
  9. Pygame 官方文档 - pygame.scrap
  10. 什么软件能把音频翻译成文字?这几款软件分享不容错过