34 lines
1008 B
Python
34 lines
1008 B
Python
"""
|
||
2026/4/18
|
||
Tan Mingyan
|
||
新建 比特 / 字节 操作工具(通用、精准)
|
||
"""
|
||
def set_bits(data: bytearray, byte_offset: int, bit_offset: int, bit_length: int, value: int):
|
||
"""
|
||
对字节数组指定位置写入指定位数的值
|
||
:param data: 原始字节数组(会被修改)
|
||
:param byte_offset: 起始字节(从0开始,用户数据域起始为0)
|
||
:param bit_offset: 起始比特(0~7)
|
||
:param bit_length: 占多少比特
|
||
:param value: 要写入的值
|
||
"""
|
||
if byte_offset >= len(data):
|
||
return
|
||
|
||
# 生成掩码
|
||
max_val = (1 << bit_length) - 1
|
||
value = value & max_val
|
||
|
||
pos = byte_offset * 8 + bit_offset
|
||
for i in range(bit_length):
|
||
bit = (value >> (bit_length - 1 - i)) & 1
|
||
byte_idx = pos // 8
|
||
bit_idx = pos % 8
|
||
|
||
if byte_idx >= len(data):
|
||
break
|
||
|
||
# 清位 + 置位
|
||
data[byte_idx] &= ~(1 << (7 - bit_idx))
|
||
data[byte_idx] |= (bit << (7 - bit_idx))
|
||
pos += 1 |