Python: 将一个字节转换为二进制并移位它的位?
Python: convert a byte to binary and shift its bits?
我想在 Python 中为学校项目将一种编码转换为另一种编码。但是,我正在翻译的编码会在其编码的第一位添加一个填充。
如何将二进制数序列向左移动一位,使其从:
00000001 11001100 01010101 等等
至
00000011 10011000 10101010 等等
所以最终结果的最低位会是前者的最高位?
可以用<<
运算符左移,反之>>
会右移
>>> x = 7485254
>>> bin(x)
'0b11100100011011101000110'
>>> bin(x << 1)
'0b111001000110111010001100'
您可以将字符串转换为一个大整数,然后进行左移(然后将大整数转换回字符串):
large_int = bytes2int(mystring)
large_int <<= 1
mystring = int2bytes(large_int)
使用例如这个简单的实现:
def bytes2int(str):
res = ord(str[0])
for ch in str[1:]:
res <<= 8
res |= ord(ch)
return res
def int2bytes(n):
res = []
while n:
ch = n & 0b11111111
res.append(chr(ch))
n >>= 8
return ''.join(reversed(res))
bytes = 'abcdefghijklmnopqrstuv'
assert int2bytes(bytes2int(bytes)) == bytes
您可以使用 bitstring 库,它允许对任意长的位串进行按位操作,例如导入和移动您的二进制数:
>>> import bitstring
>>> bitstring.BitArray(bin='0b11100100011011101000110') << 1
BitArray('0b11001000110111010001100')
我想在 Python 中为学校项目将一种编码转换为另一种编码。但是,我正在翻译的编码会在其编码的第一位添加一个填充。
如何将二进制数序列向左移动一位,使其从:
00000001 11001100 01010101 等等
至
00000011 10011000 10101010 等等
所以最终结果的最低位会是前者的最高位?
可以用<<
运算符左移,反之>>
会右移
>>> x = 7485254
>>> bin(x)
'0b11100100011011101000110'
>>> bin(x << 1)
'0b111001000110111010001100'
您可以将字符串转换为一个大整数,然后进行左移(然后将大整数转换回字符串):
large_int = bytes2int(mystring)
large_int <<= 1
mystring = int2bytes(large_int)
使用例如这个简单的实现:
def bytes2int(str):
res = ord(str[0])
for ch in str[1:]:
res <<= 8
res |= ord(ch)
return res
def int2bytes(n):
res = []
while n:
ch = n & 0b11111111
res.append(chr(ch))
n >>= 8
return ''.join(reversed(res))
bytes = 'abcdefghijklmnopqrstuv'
assert int2bytes(bytes2int(bytes)) == bytes
您可以使用 bitstring 库,它允许对任意长的位串进行按位操作,例如导入和移动您的二进制数:
>>> import bitstring
>>> bitstring.BitArray(bin='0b11100100011011101000110') << 1
BitArray('0b11001000110111010001100')