当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Bytearray转Hexadecimal String用法及代码示例


有时,我们可能会遇到需要处理异常数据类型转换的问题。一种这样的转换可以是将字节列表(字节数组)转换为 Python 中的十六进制字符串格式。让我们讨论一些可以做到这一点的方法。

使用String format()+String join()转换字节数组到十六进制字符串

上述函数的组合可用于执行此特定任务。 format 函数将字节转换为十六进制格式。格式中的“02” 用于填充所需的前导零。 join 函数允许将十六进制结果连接到字符串中。

Python3


# initializing list
test_list = [124, 67, 45, 11]
# printing original list
print("The original string is : " + str(test_list))
# using join() + format()
# Converting bytearray to hexadecimal string
res = ''.join(format(x, '02x') for x in test_list)
# printing result
print("The string after conversion : " + str(res))

输出:

The original string is : [124, 67, 45, 11]
The string after conversion : 7c432d0b

使用 binascii.hexlify() 将字节数组转换为十六进制字符串

hexlify 的内置函数可用于执行此特定任务。建议将此函数用于此特定转换,因为它是 tailor-made 来解决此特定问题。

Python3


import binascii
# initializing list
test_list = [124, 67, 45, 11]
# printing original list
print("The original string is : " + str(test_list))
# using binascii.hexlify()
# Converting bytearray to hexadecimal string
res = binascii.hexlify(bytearray(test_list))
# printing result
print("The string after conversion : " + str(res))

输出:

The original string is : [124, 67, 45, 11]
The string after conversion : 7c432d0b

使用bytes.hex()方法直接将bytearray转换为十六进制字符串:

逐步算法:

  1. 定义一个test_list,包含要转换的字节的字节数组。
  2. 使用bytearray类的hex()方法将bytearray转换为十六进制字符串。
  3. 将生成的十六进制字符串存储在变量中。
  4. 打印结果字符串。

Python3


# define the original bytearray
test_list = [124, 67, 45, 11] 
byte_array = bytearray(test_list)
print("The string before conversion: " + str(test_list))
# convert bytearray to hexadecimal string
hex_string = byte_array.hex()
# print the result
print("The string after conversion: " + hex_string)

复杂度分析:

时间复杂度:O(n),其中 n 是输入字节数组的长度。 hex() 方法只是迭代字节数组中的字节,并将每个字节转换为其十六进制表示形式,这每个字节需要恒定的时间。

空间复杂度:O(n),因为我们正在创建一个新的字符串对象来存储生成的十六进制字符串。

推荐文章 - Python | bytearray() function

使用 struct 模块和 h 格式说明符:

  • 导入结构体模块
  • 定义原始字节数组
  • 使用 struct.pack() 函数和 B 格式说明符将 bytearray 中的每个字节转换为二进制字符串
  • 使用hex()方法将每个二进制字符串转换为十六进制字符串
  • 使用 join() 方法将每个字节的十六进制字符串连接成单个字符串
  • 打印原始字节数组和生成的十六进制字符串

Python3


import struct
# Define the original bytearray
test_list = [124, 67, 45, 11]
byte_array = bytearray(test_list)
# Convert bytearray to hexadecimal string using the struct module
hex_string = ''.join(struct.pack('B', x).hex() for x in byte_array)
# Print the result
print("The string before conversion: " + str(test_list))
print("The string after conversion: " + hex_string)
输出
The string before conversion: [124, 67, 45, 11]
The string after conversion: 7c432d0b

时间复杂度:O(n),其中n是字节数组的长度
辅助空间:O(n),因为我们正在创建一个新字符串来保存连接的十六进制字符串

使用编解码器.encode()

  • 导入编解码器模块。
  • 定义表示原始字节数组的整数列表。
  • 从整数列表创建一个字节数组。
  • 使用 codecs.encode() 方法将 bytearray 转换为十六进制字符串,然后将其解码为常规字符串。
  • 打印原始整数列表和转换后的十六进制字符串。

Python3


import codecs
#Define the original bytearray
test_list = [124, 67, 45, 11]
byte_array = bytearray(test_list)
#Convert bytearray to hexadecimal string using codecs.encode()
hex_string = codecs.encode(byte_array, 'hex').decode()
#Print the result
print("The string before conversion: " + str(test_list))
print("The string after conversion: " + hex_string)
输出
The string before conversion: [124, 67, 45, 11]
The string after conversion: 7c432d0b

该代码的时间复杂度为 O(n),其中 n 是输入列表的长度。

该代码的辅助空间也是 O(n),因为它创建了一个新的字节数组和一个新的字符串



相关用法


注:本文由纯净天空筛选整理自manjeet_04大神的英文原创作品 Python | Convert Bytearray to Hexadecimal String。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。