是否可以对Python中的字符串执行按位运算?

tMC*_*tMC 7 python string bit-manipulation

这失败了,这并不奇怪:

>>> 'abc' << 8
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for <<: 'str' and 'int'
>>> 
Run Code Online (Sandbox Code Playgroud)

ascii abc等于0110000101100010011000116382179是否有一种方法可以将它移动一些任意数量,这样'abc' << 8会是01100001011000100110001100000000什么?

其他按位操作怎么样?'abc' & 63= 100011等?

Wla*_*ant 8

您可能需要的是bitstring模块(请参阅http://code.google.com/p/python-bitstring/).它似乎支持按位运算以及一些其他位数组操作.但是你应该小心地将字节输入(例如b'abc'bytes('abc')),而不是字符 - 字符可以包含Unicode并占用多个字节.


Alo*_*hal 7

对字符串执行按位运算没有任何意义.您可能希望使用该struct模块将字符串转换为数字:

>>> import struct
>>> x = 'abc'
>>> x = '\x00' * (4-len(x)) + x
>>> number = struct.unpack('!i', x)[0]
>>> number
6382179
Run Code Online (Sandbox Code Playgroud)

然后,您可以执行所有操作number.当(if)你想要一个字符串回来时,你可以做到struct.pack('!i', number).

  • 这没有意义吗?不要那么一般; 如果我想将字符串移位4以准备在QR码中进行RS编码,该怎么办? (3认同)
  • 我目前正在寻找对字符串进行按位运算来实现加密函数。我相信其他想要这样做的人有理由这样做,而你没有想到。 (2认同)