python - 如何通过显式设置其值来替换字节类型的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) 这样的函数?
解决方案
字节对象是 python 中的不可变对象,您可以索引它并对其进行迭代。
你可以把它变成一个字节数组,这将是最简单的方法
或者你可以做的是,例如,把它变成一个列表,然后改变值,如下:
tmp_list = list(bin(tmp)[2:])
tmp_list[3] = '1'
前两个字符被剥离([2:]),因为它们总是'0b'
,当然这是可选的。
字节也是字节的字符串表示形式(因此是不可变的),因此您要进行的分配= '1'
不是= 1
如果转向列表,然后返回,不是您想要的方式,您也可以复制字符串表示并更改您想要更改的一个元素。
或者,如果您对使用二进制文件感到满意,您可以执行按位运算(在 int 本身上)
推荐阅读
- python - 如何在 Selenium Python 中获得类似人类的鼠标点击?
- r - 闪亮的小部件小于应用程序宽度,我如何使两边的填充不是白色的?
- html - 内容未在移动视图的页面上向下推页脚
- c# - 如何在一种方法中为数组赋值并从另一种方法调用
- node.js - 打字稿阻止出口在全球范围内可用?
- python - 在 python (pandas.DataFrame) 中,是否有一种简单/有效的方法来创建每个索引中一列的所有可能组合,按值评分?
- html - Css 没有反映在 html 中
- python - resnet50 理论问题 - 输出形状和密集层单元?
- javascript - react js图表2中如何使用useEffect函数更改标签?
- java - 使用谷歌云 API 时任务执行失败