在python中重新排列位?

时间:2017-06-10 00:22:14

标签: python python-2.7 python-3.x

我们说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']"

3 个答案:

答案 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)

不确定你是否正在尝试做什么,所以,你的问题有点令人困惑。