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 1
else:
return 0 def 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,打印结果0 print(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. 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_processes * worker_connections/4

    如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_pro ...

  2. easyui-combobox 中多选的默认值设置、获取多选值及JS包含字符串、删除字符串

    1.项目中使用到combobox的多选值及相关操作,不多说,直接上代码: <input id="education" name="education" c ...

  3. PostgreSQL 设置主键的序列值

    1. 问题的提出 PostgreSQL定义TABLE时,主键的字段类型可以设定为自增类型serial,即插入每条记录时,主键的值自动加1.但是,当插入数据的时候指定了具体的主键值,例如主键值从0到50 ...

  4. 字节序转换与结构体位域(bit field)值的读取 Part 2 - 深入理解字节序和结构体位域存储方式

    上一篇文章讲解了带位域的结构体,在从大端机(Big Endian)传输到小端机(Little Endian)后如何解析位域值.下面继续深入详解字节序,以及位域存储的方式. (1) 我们知道,存储数字时 ...

  5. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  6. python 读 excel 模块: xlrd

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  7. 《python解释器源码剖析》第8章--python的字节码与pyc文件

    8.0 序 我们日常会写各种各样的python脚本,在运行的时候只需要输入python xxx.py程序就执行了.那么问题就来了,一个py文件是如何被python变成一系列的机器指令并执行的呢? 8. ...

  8. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  9. Python的字节编译

    1.什么是Python的.pyc文件 在python中 .pyc文件是指以.pyc为后缀名的这一类文件,在我们的python的安装目录里,找到模块所在的目录Lib会看到很多以.py结尾的模块文件,与之 ...

随机推荐

  1. 简单http和https服务器python脚本

    欢迎加入python学习交流群 667279387 工作经常要用到测试http和https协议,这里写了两个简单的脚本实现简单的http服务器和https服务器. http服务器代码 import s ...

  2. Docker系列-(2) 镜像制作与发布

    上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图 ...

  3. 源码分析 RocketMQ DLedger(多副本) 之日志复制(传播)

    目录 1.DLedgerEntryPusher 1.1 核心类图 1.2 构造方法 1.3 startup 2.EntryDispatcher 详解 2.1 核心类图 2.2 Push 请求类型 2. ...

  4. centos7 7.3php编译安装

    1.首先更新依赖包. yum -y update 2.安装依赖包 yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bz ...

  5. Java Swing JFrame实现全屏--无标题,无边框

    实现方式一: import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; public class T ...

  6. Elasticsearch 语法指南(全)

    所有的语句默认都是没有用户名和密码,如果你的 es 集群做了安全认证的话,请在每一个 crul 后面加上 -u username:password 例如: curl -u admin:123456 - ...

  7. [追热点]了解 Cloud Native 云原生

    起源和发展 Pivotal 是云原生应用的提出者,并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者. ...

  8. js获取当前时间的年月日时分秒以及时间的格式化

    1.获取当前时间 var myDate = new Date(); 2.获取时间中的年月日时分秒 myDate.getYear(); // 获取当前年份(2位) myDate.getFullYear( ...

  9. 1.Android-入门之系统架构介绍

    1.Android 系统架构 android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层,如下图所示: 2.application应用程序层 该层提供一些核 ...

  10. layui2.5 开关在confirm确认了之后在关/开

    <!--默认选中--> <div class="layui-form-item layui-form"> <div class="layui ...