在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]