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

Posted 学为所用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python读字节某一位的值,设置某一位的值,二进制位操作相关的知识,希望对你有一定的参考价值。

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读字节某一位的值,设置某一位的值,二进制位操作的主要内容,如果未能解决你的问题,请参考以下文章

怎么用C语言获取某一位的值

js中获取字符串的某一位的方法叫啥

winform怎么读一个16位整数的每一位

LeetCode(剑指 Offer)- 44. 数字序列中某一位的数字

LeetCode(剑指 Offer)- 44. 数字序列中某一位的数字

LeetCode(剑指 Offer)- 44. 数字序列中某一位的数字