字符串转换成二进制字符串

可通过以下方法将字符串转换成二进制字符串:

逐个遍历字符串中的每个字符,通过 bin() 函数将字符的 ASCII 码转换成二进制,然后用 zfill() 函数在左边补 0,保证每个字符的二进制形式都是 8 位的,最后通过 join() 函数将所有的二进制字符串连接起来。

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def str_to_binary(string):
binary_list = []

for char in string:
binary_list.append(bin(ord(char))[2:].zfill(8))

return ''.join(binary_list)

二进制字符串转换成正常字符串

实现逻辑是:

  1. 将二进制字符串按 8 位切片,得到一系列长度为 8 的二进制子串;
  2. 将每个二进制子串转换成十进制整数,存入 list_int 列表;
  3. 使用 bytes() 函数将 list_int 列表转换成 bytes 对象;
  4. 最后使用 decode() 方法将 bytes 对象解码成字符串。
1
2
3
4
5
6
7
def binary_to_str(bin_str):
list_bin = [bin_str[i:i + 8] for i in range(0, len(bin_str), 8)]
list_int = []
for bin_s in list_bin:
list_int.append(int(bin_s, 2))

return bytes(list_int).decode()

示例

以下示例演示将字符串 JOHNSON LIN 转换成二进制字符串,然后再转换回正常字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def str_to_binary(string):
binary_list = []

for char in string:
binary_list.append(bin(ord(char))[2:].zfill(8))

return ''.join(binary_list)

def binary_to_str(bin_str):
list_bin = [bin_str[i:i + 8] for i in range(0, len(bin_str), 8)]
list_int = []
for bin_s in list_bin:
list_int.append(int(bin_s, 2))

return bytes(list_int).decode()

def main():
test_str = "JOHNSON LIN"
print("原始字符串:" + test_str)

bin_str = str_to_binary(test_str)
print("二进制字符串:" + bin_str)

o_str = binary_to_str(bin_str)
print("转换成字符串:" + o_str)

if __name__ == '__main__':
main()

输出结果如下:

1
2
3
原始字符串:JOHNSON LIN
二进制字符串:0100101001001111010010000100111001010011010011110100111000100000010011000100100101001110
转换成字符串:JOHNSON LIN

(END)