在编程开发工作中,数据格式转换是常见操作之一。其中,将字符串转换为二进制形式的转换也经常出现。本文将探讨实现这一转换的几种方法。

方法一:使用 join() + ord() + format()

上述函数的结合可以用来完成这个特定任务。ord() 函数将字符转换为 ASCII 码对应的整数,format() 函数将整数转换为二进制数,join() 函数用于将每个转换得到的字符连接起来,形成一个字符串。

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

test_str = "JOHNSON LIN"

print("原始字符串:" + test_str)

# 使用 join() + ord() + format(),将字符串转换为二进制
res = ''.join(format(ord(i), '08b') for i in test_str)

print("二进制转换后的字符串:" + res)

输出:

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

方法二:使用 join() + bytearray() + format()

这个方法与上述方法大致相似。不同之处在于,不是使用 ord() 函数将每个字符转换为 ASCII 码,而是使用 binarray() 函数一次性将整个字符串转换为二进制。

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

test_str = "JOHNSON LIN"

print("原始字符串:" + test_str)

# 使用 join() + bytearray() + format(),将字符串转换为二进制
res = ''.join(format(i, '08b') for i in bytearray(test_str, encoding='utf-8'))

print("二进制转换后的字符串:" + res)

输出:

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

方法三:使用 join() + bin() + zfill()

我们定义了一个函数 str_to_binary(string),它接受一个字符串作为输入。

在函数内部,我们创建一个名为 binary_list 的空列表,用于存储输入字符串中的每个字符的二进制形式。

然后使用 for 循环遍历输入字符串的每个字符。对于每个字符,我们使用 ord() 函数将其转换为 ASCII 码对应的整数,然后使用 bin() 函数将该整数转换为二进制字符串。bin() 函数返回一个带有 '0b' 前缀的字符串,所以我们使用列表切片的方式删除这个前缀。

之后,我们使用 zfill(8) 方法用前导零在二进制形式左侧填充,直到长度达到 8。zfill() 方法用指定的字符(本例中为 '0')填充字符串左侧,直到达到所需长度。

接着,我们将二进制形式追加到 binary_list 中。之后,我们将列表中的所有二进制值连接起来,使用 join() 方法以单个字符串形式返回。

最后,我们以 “JOHNSON LIN “字符串为例测试该函数。该函数返回输入字符串的二进制字符串表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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)

test_str = "JOHNSON LIN"

print("原始字符串:" + test_str)

res = str_to_binary(test_str)

print("二进制转换后的字符串:" + res)

输出:

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

方法四:使用 binascii 模块

示例代码:

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

import binascii

test_str = "JOHNSON LIN"

print("原始字符串:" + test_str)

# 使用 binascii 将字符串转换为二进制
hex_str = binascii.hexlify(test_str.encode())
bin_str = bin(int(hex_str, 16))[2:].zfill(8 * ((len(hex_str) + 1) // 2))
res = bin_str

print("二进制转换后的字符串:" + res)

输出:

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

(END)