2017-10-13 34 views
0

我希望能夠輸入一系列的數字,在64位再現位,然後反向並顯示8個字節。我一直在查找bitstring,但沒有得到輸出我期待的。Python函數,將輸入到64位,然後更改爲8bytes輸出

代碼

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] 

回答

0

我想這可能就是你所要尋找的:

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時,您需要通過基地的時間不是10(本例中爲2)。
  3. 我覺得第8個元素應該是1而不是128
0
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 

比其他解決方案快運行時間

+0

不要發佈鏈接的答案,以防鏈接過時。您應該在此總結其相關內容,以便您的答案是獨立的,並提供學分或進一步閱讀的鏈接。 – Reti43

相關問題