Pythonは、ビットのバイト値、ビットセットの値、ビット操作を読み取ります

Pythonは、ビットのバイト値、ビットセットの値、ビット操作を読み取ります

  実際には、パフォーマンスを向上させるために、物事の開発プロジェクト、デバイスの接合端部、頻繁に使用されているが、バイトの実施形態のバイナリ文字列をカプセル化するためのプロトコルで、より0 1、TrueとFalse、はいとはそのようなことになりますすべての8ブールは、1バイトのみ、ビットとバイトを占めています。ネットワークの安定性のための要件を減らすために、ボリュームを減らします。これは、一人ひとりの問題とどのように各ビットの値を設定するには、バイト値の読み方をもたらします。

  プレゼンテーションのトレーニングこれらの日は道によって今共有に皆のため、バイトのビット値リテラシーの問題を解決するため、二つの機能を書いて、コードを記述します。

  直接テストの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
"""

おすすめ

転載: www.cnblogs.com/xueweisuoyong/p/11874444.html