2014-09-25 89 views
-2

我有这样dict = { A:3, B:5, C:3, D:2, E:6, F:5}生成基于字典的值的二进制串在python

字典我想编写,其基于该值作为二进制比特宽度级联二进制流的功能。

如果宽度为7: - 二进制0101010上LSB位置

假设如果函数是func(B, D, E)从0开始7位:我的输出应该产生的级联二进制流

0101010101010 

因为:

{01010 (B) + 10 (D) + 101010 (E)} 

每个值的lsb位必须始终为零。预计产量0101010101010

这里是我的尝试:

def Generate_binary_stream(width): 
output_stream = "" 
bit = 0 
for i in range (0,width): 
    output_stream += str(bit) 
    bit = ~bit 

print ("The bitstream for width %d is %s"%(width,output_stream)) 

输出我得到:0-10-10-10-10(如何消除连字符?)

+2

'01010''B'的二进制表示怎么样? – 2014-09-25 18:49:43

+0

由于B的宽度是5,从LSB上的0开始,它的值将是0和1的高达5位数字-01010 – user3769674 2014-09-25 18:54:03

+1

提示:编写一个函数'get_binary_stream(size)',返回所需大小的单个字符串。然后用它来获得连接的二元蒸汽。 – Kevin 2014-09-25 18:54:56

回答

0

可以转换与bin功能二进制:

my_list=[] 
    >>> def conv(*args): 
    ... for i in args: 
    ... my_list.append(bin(dict[i])) 
     print ''.join(map(str,my_list)) 

    >>> conv('A','B','C') 
    0b110b1010b110b110b1010b11 
+0

我不希望密钥的二进制等效值。它只是替代0和1的宽度 – user3769674 2014-09-25 18:55:56

+0

你的输出如何匹配预期? – 2014-09-25 18:57:41

+0

对不起,我不明白'备用0和1的宽度'! – Kasramvd 2014-09-25 18:59:07

0

不知道我是否理解正确,但这似乎产生了预期的结果:

width = { 'A':3, 'B':5, 'C':3, 'D':2, 'E':6, 'F':5} 

def bits(width): 
    return ('0' if width % 2 else '') + '10' * (width // 2) 

def to_bits(s): 
    return ''.join(bits(width[x]) for x in s) 

print to_bits('BDE') # 0101010101010 
相关问题