0

我在一个列表中有一个三元素tuple,以及一个 8 位二进制的消息

list = [(15,103,255)]

message = '0110100001100101011011000110110001101111'

我需要一个函数,它会同时接收 3 位消息,然后将每个元素从 转换tuple为二进制,并用消息中的位替换它的前 3 位。

例如:步骤 1。a = message[0:3]

         a = '011'

第2步 : b = '{0:08b}'.format(15)

         b = '00001111'

第 3 步: c = '01101111'

第4步 :d = int(c,2)

     d = 111

新列表应该是

new_list = [(111,71,31)]
4

1 回答 1

2

这是一种方法,对一些不清楚的事情进行猜测。我把它塞进了一个班级,以便更容易改变:

class BitFiddler:
    def __init__(self, bitstring):
        self.bitstring = bitstring
        self.i = 0

    def fiddle(self, value):
        nextbits = self.bitstring[self.i : self.i + 3]
        self.i += 3
        nextbits = int(nextbits, 2)
        return (value & 0x1f) | (nextbits << 5)

thelist =  [(15,103,255)]
message =  '0110100001100101011011000110110001101111'
bf = BitFiddler(message)
print [tuple(bf.fiddle(value) for value in thelist[0])]

输出:

[(111, 71, 31)]

作为 1 班轮:

print [tuple((v & 0x1f) | (int(message[i:i+3], 2) << 5)
             for v, i in zip(thelist[0], range(0, len(message), 3)))]
于 2013-10-03T03:48:03.480 回答