首页 > 解决方案 > 如何通过显式设置其值来替换字节类型的python对象中的单个位

问题描述

假设我有一个字节类型的变量 tmp 并包含零和一。我想通过设置一个显式值(例如 1)来替换 tmp 中第五个位置的值。

我想知道在具有“字节”类型的对象(tmp)中替换单个位的干净方法是什么。我想直接设置。我的尝试不起作用。非常感谢帮助理解我的方法中的问题。

print(tmp)       # -> b'00101001'
print(type(tmp)) # -> <class 'bytes'>
tmp[3] =  1      # Expected b'00111001' but actually got TypeError: 'bytes' object does not support item assignment

有没有像 set_bit_in(tmp, position, bit_value) 这样的函数?

标签: pythonreplacesetbytebit

解决方案


字节对象是 python 中的不可变对象,您可以索引它并对其进行迭代。

你可以把它变成一个字节数组,这将是最简单的方法

或者你可以做的是,例如,把它变成一个列表,然后改变值,如下:

    tmp_list = list(bin(tmp)[2:])
    tmp_list[3] = '1'

前两个字符被剥离([2:]),因为它们总是'0b',当然这是可选的。

字节也是字节的字符串表示形式(因此是不可变的),因此您要进行的分配= '1'不是= 1

如果转向列表,然后返回,不是您想要的方式,您也可以复制字符串表示并更改您想要更改的一个元素。

或者,如果您对使用二进制文件感到满意,您可以执行按位运算(在 int 本身上)


推荐阅读