如何在python中将位打包成可变长度的单词?

时间:2013-01-29 11:40:39

标签: python bit-manipulation

我可以将字符打包成32位字(或任何其他固定大小),但我想将位大小作为参数:

这适用于32位:

def vectorize_key(key):
    return (v[0] << 24 | v[1] << 16 | v[2] << 8 | v[3] for v in split((ord(k) for k in key),4) )   

这是不起作用的。它说int and tuple bad operands for |,但我看不出我是如何得到一个元组的。我明确地“解包”了元组! :

def vectorize_key(key,word_size=32):
    return (reduce(lambda p, (e,f) : p | (e << f),((x[i],i*8) for i in range(word_size/8))) for x in split((ord(k) for k in key),word_size/8))

1 个答案:

答案 0 :(得分:0)

知道了。我错过了reduce的初始化值:

def vectorize_key(key,word_size=32):
    return (reduce(lambda p, (e,f) : p | (e << f),((x[i],i*8) for i in range(word_size/8)),0) for x in split((ord(k) for k in key),word_size/8))