Sim*_*eon 5 python byte replace set bit
假设我有一个字节类型的变量 tmp 并包含零和一。我想通过设置显式值(例如 1)来替换 tmp 中第五个位置的值。
我想知道什么是替换类型为“Bytes”的对象(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
Run Code Online (Sandbox Code Playgroud)
有没有像set_bit_in(tmp,position,bit_value)这样的函数?
bytes 对象是 python 中的不可变对象,但您可以对其进行索引和迭代。
不过,您可以将其转换为字节数组,这将是最简单的方法
或者你可以做的就是,例如将其变成一个列表,然后更改值,如下所示:
tmp_list = list(bin(tmp)[2:])
tmp_list[3] = '1'
Run Code Online (Sandbox Code Playgroud)
前两个字符被删除([2:]),因为它们始终是'0b',当然这是可选的。
另外,字节是字节的字符串表示形式(因此是不可变的),因此您想要进行的分配= '1'不是= 1
如果转到列表,然后返回,这不是您想要的方式,您也可以只复制字符串表示形式并更改您想要更改的一个元素。
或者,如果您对使用二进制文件感到满意,则可以执行按位运算(对 int 本身)