我们说A = 0b11110101
。
我想创建一个像这个伪代码
这样的新整数B[0] = A[4]
B[1] = A[7]
B[2] = A[0]
B[3] = A[6]
B[4] = A[1]
B[5] = A[2]
B[6] = A[3]
B[7] = A[5]
我该怎么做?
也许我可以先创建一个数组B,但最后我需要一个整数/二进制。
更新#1
我做了这样的事情:
num=0
pc1_tidyHex = []
pc1_tidyHex.append([tidyHex[56], tidyHex[48], tidyHex[40], tidyHex[32], tidyHex[24], tidyHex[16], tidyHex[8]])
num = int(''.join(map(str, pc1_tidyHex)))
print(pc1_tidyHex)
print(num)
我收到了这个错误:
Traceback (most recent call last):
File "F:\TUC Aux\python\budi.py", line 47, in <module>
num = int(''.join(map(str, pc1_tidyHex)))
ValueError: invalid literal for int() with base 10: "['0', '1', '1', '0', '1', '0', '0']"
答案 0 :(得分:4)
将整数A转换为从LSB到MSB的二进制字符串,然后使用索引
操作该位bin_map = [5,3,2,1,6,0,7,4]
A = 0b11110101
binA = bin(A)[2:][::-1]
B = int(''.join(binA[i] for i in bin_map), 2)
# B will be integer 175 or binary 0b10101111
答案 1 :(得分:1)
完成array
后,您可以使用:
num = int(''.join(map(str, B)))
你会得到你的整数。如果您想将其作为字符串,请删除int()
答案 2 :(得分:0)
您不能使用字符串连接将位数组转换为整数。你需要做一些改变:
A = 0b11110101
b_map = [5, 3, 2, 1, 6, 0, 7, 4] # map of bits from your `A`, high->low order
B = 0 # initialize as 0
for target_position in b_map: # loop through our positions
B = (B << 1) | (A >> target_position & 1) # shift by one, pick the target bit from A
print("B: {} (binary: {})".format(B, bin(B)))
# B: 175 (0b10101111)
不确定你是否正在尝试做什么,所以,你的问题有点令人困惑。