我正在做一些计算,我想知道如何在 python 中反转字节。
例如:
0b11111111
应翻转为 0b00000000
。
我尝试过将其变成字符串并翻转它,但我无法以某种方式将其变回整数。
另外,我想补充一点,〜不起作用,因为它只是产生相同的数字,但为负值
bin(0b11010111 ^ 0b11111111) // bit subtraction
# Result
# bin(0b11010111 ^ 0b11111111)
#'0b101000'
# for each bit subtraction with 1 occur
解释为什么
~
“dit 不起作用”:你想反转一个字节中的所有位(8 位),但是 0b....
值不是一个字节,而是一个比仅仅位数更多的 int 8.
~var
反转整数中的所有位。您可以使用掩码清除除最低 8 位之外的所有位,以获得您期望的结果:
MASK8 = 0b11111111 # or 255 decimal
v = 0b11101110
inv = ~v & MASK8 # 0b10001
def flippingBits(n):
binary_list=list(bin(n))[2::]
binary_32=''
binary_result=''
for item in binary_list:
if item=='1':
binary_32+='0'
else:
binary_32+='1'
if 32-len(binary_list)>0:
for i in range(32-len(binary_list)):
binary_result+='1'
binary_result+=binary_32
else:
binary_result=binary_32
result=int(binary_result, 2)
return result
这是一个针对黑客级别翻转位的解决方案: 该函数接收一个无符号整型数,将该数转换为二进制表示形式,并翻转 32 位表示形式中的所有位,然后返回与剩余二进制数对应的无符号整型数。 首先,我使用 bin() 函数将其转换为二进制表示形式,然后使用 for 循环将其转换为字符串,但将每一位更改为相反的(翻转),最后我将字符串与字符串长度和字符串长度之间的差异连接起来我需要 32 个空格(32 位),在字符串的其余部分添加 1。最后我使用 int(number, base) 函数将其更改为整数。 希望对你有帮助。