将一串二进制数转换为字符串时出现问题

Troubles converting a string of binary numbers into a character string

我正在努力改进我的编程。这是我创建的一个玩具问题,它接受一个字符串并将其转换为二进制形式以作为信号发送。然后接收并解码该信号。最终,我想添加噪音来练习过滤。

这是我的发射器功能:

def transmitter(msg):
    Z = []
    pulse_msg = ''
    for x in msg:
        pulse_msg = pulse_msg + ''.join(format(ord(x),'b'))
        print(len(pulse_msg))

    for x in pulse_msg:
        Z.append(x)
        #print(Z)
    t = range(len(Z))
    #plt.plot(t,Z)    
    return(Z)

这是我的接收器函数:

def rec(msg):
    A = ''.join(msg)
    Y = []
    i = 1
    while i < len(A):
        Y.append(A[i-1:6+i])
        i +=7
    return(A)

z = ['1', '1', '0', '1', '0', '0', '0', '1', '1', '0', '0', '1', '0', '1', '1', '1', '0', '1', '1', '0', '0', '1', '1', '0', '1', '1', '0', '0', '1', '1', '0', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '0', '0', '1', '0', '1', '1', '0', '1', '1', '0', '0', '1', '1', '0', '0', '1', '0', '0']

A = rec(z)
print(A)

我的接收器有问题。 Y 的值是二进制形式的原始字母列表,但我不明白如何将其转换为字符。我曾尝试使用 binascii 函数,但要么我使用不正确,要么由于 Y 中的值是字符串而无法正常工作。在这个测试中 z = 'hello world'。如果我能解决任何问题,请告诉我。感谢您的帮助!

你有两个问题

  1. 您的发送器函数正在删除字节的前导零。这意味着您的某些信件比其他信件短,因此无法翻译。你应该做类似 '{:08b}'.format(ord(x)) 的事情来获得 8 宽零填充位串。
  2. 您应该使用 chr 函数将 int 变回字符。令人高兴的是,我们可以使用 int 函数将位串转换为整数,例如 chr(int('01101000', 2)) == 'h'。 (2 是要转换为整数的字符串的基数)。