Python 将输入转换为 64 位然后更改为 8 字节输出的函数
Python function that would take input into 64 bit and then change to 8bytes output
我希望能够输入代表64位位的一系列数字..然后反转它并显示8个字节。我一直在查看位串,但还没有输出我期望的内容。
代码
def Pconvert(*varloadID):
bits = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,]
for x in varloadID:
x -= 1
bits[x] = 1
print bits
j = int(''.join(map(str, bits)))
print j
输入
Pconvert(1,8,64)
期待名单
[129,0,0,0,0,0,0,128]
import struct
def Pconvert(*varloadID):
bits = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, ]
for x in varloadID:
x -= 1
bits[x] = 1
j = int(''.join(map(str, bits)), 2)
print(j)
bytestr = struct.pack('>Q', j).decode('cp1252')
a = list()
for i in bytestr:
a.append(ord(i))
print(a.__len__())
return a
使用 struct 的 运行 时间比其他解决方案
我认为这可能会满足您的需求:
def Pconvert(*varloadID):
bits = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,]
for x in varloadID:
bits[x-1] = 1
print bits
bytes = [bits[i*8:i*8+8] for i in xrange(0,8)]
return map(lambda byte: int(''.join(map(str,byte)),2),bytes)
print Pconvert(1,8,64)
一些注意事项:
- 你必须以某种方式将你的 64 位分成 8 个段,这里是
bytes
变量。
- 调用
int
. 时需要传递非10
的基数(本例为2
)
- 我觉得第8个元素应该是
1
而不是128
.
我希望能够输入代表64位位的一系列数字..然后反转它并显示8个字节。我一直在查看位串,但还没有输出我期望的内容。
代码
def Pconvert(*varloadID):
bits = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,]
for x in varloadID:
x -= 1
bits[x] = 1
print bits
j = int(''.join(map(str, bits)))
print j
输入
Pconvert(1,8,64)
期待名单
[129,0,0,0,0,0,0,128]
import struct
def Pconvert(*varloadID):
bits = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, ]
for x in varloadID:
x -= 1
bits[x] = 1
j = int(''.join(map(str, bits)), 2)
print(j)
bytestr = struct.pack('>Q', j).decode('cp1252')
a = list()
for i in bytestr:
a.append(ord(i))
print(a.__len__())
return a
使用 struct 的 运行 时间比其他解决方案
我认为这可能会满足您的需求:
def Pconvert(*varloadID):
bits = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,]
for x in varloadID:
bits[x-1] = 1
print bits
bytes = [bits[i*8:i*8+8] for i in xrange(0,8)]
return map(lambda byte: int(''.join(map(str,byte)),2),bytes)
print Pconvert(1,8,64)
一些注意事项:
- 你必须以某种方式将你的 64 位分成 8 个段,这里是
bytes
变量。 - 调用
int
. 时需要传递非 - 我觉得第8个元素应该是
1
而不是128
.
10
的基数(本例为2
)