文本-二进制转换
text - binary conversion
我正在尝试制作一个 python 程序,将文本转换为一个长二进制字符串。通常的测试行和句子很容易转换成二进制,但我在处理空格时遇到了问题。
如何放入二进制字节来表示回车键?
我是否只输入“/”和 'n' 字符串?
理想情况下,我希望能够将整个文本文件转换为二进制字符串并能够再次将其转换回来。显然,如果我使用 python 脚本来执行此操作,制表符将变得混乱并且程序将被破坏。
用 C 语言做这些事情会更好吗?
显然,C 程序在没有空格的情况下仍然可以运行,而 python 则不会。
简而言之,我需要知道如何用二进制表示 'tab' 和 'enter' 键,以及如何创建将它们转换为二进制的函数。 bin(ord('\n')) 会好吗?
该选项卡在 ASCII 图表中表示为 0x08 0x09,或二进制字符串中的 "00001000" "00001001"。
Enter 键不同,因为它可以表示 CR(回车 return)、LF(换行)或两者。
CR 表示为 0x0d,或二进制字符串“00001101”。
LF 表示为 0x0A,或二进制字符串“00001010”。
常见的约定是“\t”代表制表符,“\r”代表 CR,“\n”代表换行符。
简单的怎么样:
def text_to_bits(text):
bytes = text.encode('utf8')
bits = [bin(ord(c))[2:].zfill(8) for c in bytes]
return ''.join(bits)
这将完全使用 text
中的字节(一旦编码为 utf8
- 如果 text
是 ASCII 开头,这将是无害的,但如果它是 Unicode,则必不可少! -) 因此不需要约定或其他安排——您将得到一个 0
和 1
的字符串,每个字节八位。
正如@gnibbler 的评论正确指出的那样,如果 text
有数百个字符长,查找 table 会更快,例如,用两行替换之前的 bits =
:
lookup = {c: bin(c))[2:].zfill(8) for c in range(256)}
bits = [lookup[ord(c)] for c in bytes]
或者,lookup
也可以是一个列表:
lookup = [bin(c))[2:].zfill(8) for c in range(256)]
所有这些都应该相同,选择最适合您的速度和清晰度组合!-)
我正在尝试制作一个 python 程序,将文本转换为一个长二进制字符串。通常的测试行和句子很容易转换成二进制,但我在处理空格时遇到了问题。
如何放入二进制字节来表示回车键?
我是否只输入“/”和 'n' 字符串?
理想情况下,我希望能够将整个文本文件转换为二进制字符串并能够再次将其转换回来。显然,如果我使用 python 脚本来执行此操作,制表符将变得混乱并且程序将被破坏。
用 C 语言做这些事情会更好吗?
显然,C 程序在没有空格的情况下仍然可以运行,而 python 则不会。
简而言之,我需要知道如何用二进制表示 'tab' 和 'enter' 键,以及如何创建将它们转换为二进制的函数。 bin(ord('\n')) 会好吗?
该选项卡在 ASCII 图表中表示为 0x08 0x09,或二进制字符串中的 "00001000" "00001001"。
Enter 键不同,因为它可以表示 CR(回车 return)、LF(换行)或两者。
CR 表示为 0x0d,或二进制字符串“00001101”。 LF 表示为 0x0A,或二进制字符串“00001010”。
常见的约定是“\t”代表制表符,“\r”代表 CR,“\n”代表换行符。
简单的怎么样:
def text_to_bits(text):
bytes = text.encode('utf8')
bits = [bin(ord(c))[2:].zfill(8) for c in bytes]
return ''.join(bits)
这将完全使用 text
中的字节(一旦编码为 utf8
- 如果 text
是 ASCII 开头,这将是无害的,但如果它是 Unicode,则必不可少! -) 因此不需要约定或其他安排——您将得到一个 0
和 1
的字符串,每个字节八位。
正如@gnibbler 的评论正确指出的那样,如果 text
有数百个字符长,查找 table 会更快,例如,用两行替换之前的 bits =
:
lookup = {c: bin(c))[2:].zfill(8) for c in range(256)}
bits = [lookup[ord(c)] for c in bytes]
或者,lookup
也可以是一个列表:
lookup = [bin(c))[2:].zfill(8) for c in range(256)]
所有这些都应该相同,选择最适合您的速度和清晰度组合!-)