Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将字符串视为位数组_Python_Arrays_Python 2.7_Parsing_Bit Manipulation - Fatal编程技术网

Python将字符串视为位数组

Python将字符串视为位数组,python,arrays,python-2.7,parsing,bit-manipulation,Python,Arrays,Python 2.7,Parsing,Bit Manipulation,我通过一次读取一块数据来解析Python中的文件。使用struct.unpack,我可以将数据块解析为整数、字符串和其他类型的组件 数据的结构是64位二进制数据和64位填充 比如说 res = struct.unpack('>64s64x', s) 有了这个,我可以将结构解压成一个64位长的“字符串”,其中包含64位的填充 我的主要目标是获取64位的“字符串”,res[0],并将其反转。(将1切换到0,反之亦然) 但是,如何将该字符串转换为位数组并对其进行处理 注意-同样,打印res[0

我通过一次读取一块数据来解析Python中的文件。使用struct.unpack,我可以将数据块解析为整数、字符串和其他类型的组件

数据的结构是64位二进制数据和64位填充

比如说

res = struct.unpack('>64s64x', s)
有了这个,我可以将结构解压成一个64位长的“字符串”,其中包含64位的填充

我的主要目标是获取64位的“字符串”,res[0],并将其反转。(将1切换到0,反之亦然)

但是,如何将该字符串转换为位数组并对其进行处理


注意-同样,打印res[0]也会产生一些乱码,而不是1和0,因为“字符串”本身不是二进制数据的字符串表示形式。位数组被视为字符串

具体来说,它被解释为
字节
(与Python 2中的
str
相同,但不是3)。如果您的目标只是反转数据位,这相当简单,您可以使用
ord()
获取字符的int值,然后使用
0xff
的按位异或进行反转(我将使用一个简单的字符串作为示例字符串):

如果您需要将数据以字节形式传递回某个位置:

result = ''.join(chr(ord(x) ^ 0xff) for x in data)
如果要检查单个位的值,可以使用位屏蔽(这是执行此操作的标准方法,即使在C中也是如此):


具体来说,它被解释为
字节
(与Python 2中的
str
相同,但不是3)。如果您的目标只是反转数据位,这相当简单,您可以使用
ord()
获取字符的int值,然后使用
0xff
的按位异或进行反转(我将使用一个简单的字符串作为示例字符串):

如果您需要将数据以字节形式传递回某个位置:

result = ''.join(chr(ord(x) ^ 0xff) for x in data)
如果要检查单个位的值,可以使用位屏蔽(这是执行此操作的标准方法,即使在C中也是如此):


谢谢你的解释!这工作做得很好!谢谢你的解释!这工作做得很好!
>>> bool(ord('a') & 0x01)
True
>>> bool(ord('a') & 0x02)
False
>>> bool(ord('a') & 0x04)
False
>>> bool(ord('a') & 0x08)
False
>>> bool(ord('a') & 0x10)
False
>>> bool(ord('a') & 0x20)
True
>>> bool(ord('a') & 0x40)
True
>>> bool(ord('a') & 0x80)
False