Python讀位元組某一位的值,設置某一位的值,二進位位操作 在物聯網實際應用項目開發中,為了提升性能,與設備端配合,往往最終使用的是二進位位元組串方式進行的通信協議封裝,更會把0和1、True和False、Yes和No這樣的布爾值每8個只占用一個位元組,用位元組中的位來表示。減少傳輸量,減少對網路穩定性的 ...
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
"""