将一串二进制数转换为字符串时出现问题
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'。如果我能解决任何问题,请告诉我。感谢您的帮助!
你有两个问题
- 您的发送器函数正在删除字节的前导零。这意味着您的某些信件比其他信件短,因此无法翻译。你应该做类似
'{:08b}'.format(ord(x))
的事情来获得 8 宽零填充位串。
- 您应该使用
chr
函数将 int
变回字符。令人高兴的是,我们可以使用 int
函数将位串转换为整数,例如 chr(int('01101000', 2)) == 'h'
。 (2 是要转换为整数的字符串的基数)。
我正在努力改进我的编程。这是我创建的一个玩具问题,它接受一个字符串并将其转换为二进制形式以作为信号发送。然后接收并解码该信号。最终,我想添加噪音来练习过滤。
这是我的发射器功能:
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'。如果我能解决任何问题,请告诉我。感谢您的帮助!
你有两个问题
- 您的发送器函数正在删除字节的前导零。这意味着您的某些信件比其他信件短,因此无法翻译。你应该做类似
'{:08b}'.format(ord(x))
的事情来获得 8 宽零填充位串。 - 您应该使用
chr
函数将int
变回字符。令人高兴的是,我们可以使用int
函数将位串转换为整数,例如chr(int('01101000', 2)) == 'h'
。 (2 是要转换为整数的字符串的基数)。