gpt4 book ai didi

python - 如何通过显式设置其值来替换字节类型的 python 对象中的单个位

转载 作者:行者123 更新时间:2023-11-28 19:01:04 24 4
gpt4 key购买 nike

假设我有一个字节类型的变量 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

有没有set_bit_in(tmp, position, bit_value)之类的函数?

最佳答案

bytes 对象是 python 中的不可变对象(immutable对象),您可以对其进行索引和迭代。

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

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

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

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

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

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

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

关于python - 如何通过显式设置其值来替换字节类型的 python 对象中的单个位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com