在python中重新排列位?

在python中重新排列位?,python,python-2.7,python-3.x,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[

假设我有
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']"
回溯(最近一次呼叫最后一次):
文件“F:\TUC Aux\python\budi.py”,第47行,在
num=int(“”.join(map(str,pc1_tidyHex)))
ValueError:以10为基数的int()的文本无效:['0','1','1','0','1','0','0']

使用完
阵列后,您可以使用:

num = int(''.join(map(str, B)))

你将得到你的整数。如果要将其作为字符串,请在使用完
数组后删除
int()
,您可以使用:

num = int(''.join(map(str, B)))

你将得到你的整数。如果要将其作为字符串,请删除
int()

不能使用字符串联接将位数组转换为整数。您需要进行一些位转换:

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)
A=0b11110101
b#u map=[5,3,2,1,6,0,7,4]#来自'A',高->低阶的位映射
B=0#初始化为0
对于b_图中的目标位置:#通过我们的位置循环
B=(B>target_position&1)#移位1,从A中选取目标位
打印(“B:{}(二进制:{})”。格式(B,bin(B)))
#B:175(0b10101111)

不太确定你是不是想这么做,但是,你的问题有点让人困惑

不能使用字符串联接将位数组转换为整数。您需要进行一些位转换:

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)
A=0b11110101
b#u map=[5,3,2,1,6,0,7,4]#来自'A',高->低阶的位映射
B=0#初始化为0
对于b_图中的目标位置:#通过我们的位置循环
B=(B>target_position&1)#移位1,从A中选取目标位
打印(“B:{}(二进制:{})”。格式(B,bin(B)))
#B:175(0b10101111)

不太确定你是不是想这么做,但是,你的问题有点让人困惑

将整数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

将整数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

嗨,我出错了,我更新了上面的帖子。这是我知道如何构建数组的唯一方法,这是我第一次使用python。@Codelearner777这是因为您将数组附加到数组中。在这种情况下,您可以更改为
num=int(''.join(pc1_tidyHex[0]))
关于创建数组,您可以直接使用以下值创建数组:
pc1_tidyHex=[tidyHex[56]、tidyHex[48]、tidyHex[40]、…等等
,但接下来需要更改为
num=int('.join(pc1_tidyHex))
此答案不是按位操作的。如果你想使用
int
@Codelearner777的基本参数,请不要忘记接受答案,如果你觉得它有用=)嗨,我有一个错误,我更新了上面的帖子。这是我知道如何构建数组的唯一方法,这是我第一次使用python。@Codelearner777这是因为您将数组附加到数组中。在这种情况下,您可以更改为
num=int(''.join(pc1_tidyHex[0]))
关于创建数组,您可以直接使用以下值创建数组:
pc1_tidyHex=[tidyHex[56]、tidyHex[48]、tidyHex[40]、…等等
,但接下来需要更改为
num=int('.join(pc1_tidyHex))
此答案不是按位操作的。如果你想使用
int
@Codelearner777的基本参数,如果你觉得有用的话,别忘了接受答案=)当然可以,尽管它很复杂而且效率很低:
int(''.join(str(e)表示数组中的e),2)
sum(vSure)相比,你可以:
int('.join(str(e)对于数组中的e),2)
与类似于
sum(vHi,谢谢你的想法。我想我可以在下一步中使用这个想法。如果我想让变量B成为数组,我该怎么办?要将B保留为数组,只需将我的代码的最后一行替换为
B=[binA[I]for I in bin_map]
Hi,谢谢你的想法。我想我可以在下一步中使用这个想法。如果我想让变量B成为数组,我该怎么办?要将B保留为数组,只需将我代码的最后一行替换为
B=[binA[I]for I in bin_map]