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)

一些注意事项:

  1. 你必须以某种方式将你的 64 位分成 8 个段,这里是 bytes 变量。
  2. 调用int.
  3. 时需要传递非10的基数(本例为2
  4. 我觉得第8个元素应该是1而不是128.