使用str.format
:
>>> array_alpha = [ 133, 53, 234, 241 ]
>>> print ''.join('{:02x}'.format(x) for x in array_alpha)
8535eaf1
或使用 format
>>> print ''.join(format(x, '02x') for x in array_alpha)
8535eaf1
注意: 在format语句中,
02
表示0
在必要时最多填充2个前导s。这很重要,因为[0x1, 0x1, 0x1] i.e. (0x010101)
它将被格式化为"111"
而不是"010101"
或bytearray
与配合使用binascii.hexlify
:
>>> import binascii
>>> binascii.hexlify(bytearray(array_alpha))
'8535eaf1'
这是Python 3.6.1中上述方法的基准:
from timeit import timeit
import binascii
number = 10000
def using_str_format() -> str:
return "".join("{:02x}".format(x) for x in test_obj)
def using_format() -> str:
return "".join(format(x, "02x") for x in test_obj)
def using_hexlify() -> str:
return binascii.hexlify(bytearray(test_obj)).decode('ascii')
def do_test():
print("Testing with {}-byte {}:".format(len(test_obj), test_obj.__class__.__name__))
if using_str_format() != using_format() != using_hexlify():
raise RuntimeError("Results are not the same")
print("Using str.format -> " + str(timeit(using_str_format, number=number)))
print("Using format -> " + str(timeit(using_format, number=number)))
print("Using binascii.hexlify -> " + str(timeit(using_hexlify, number=number)))
test_obj = bytes([i for i in range(255)])
do_test()
test_obj = bytearray([i for i in range(255)])
do_test()
结果:
Testing with 255-byte bytes:
Using str.format -> 1.459474583090427
Using format -> 1.5809937679100738
Using binascii.hexlify -> 0.014521426401399307
Testing with 255-byte bytearray:
Using str.format -> 1.443447684109402
Using format -> 1.5608712609513171
Using binascii.hexlify -> 0.014114164661833684
使用的方法format
的确提供了其他格式选项,例如用空格" ".join
,逗号", ".join
,大写字母"{:02X}".format(x)
/format(x, "02X")
等分隔数字,但是会影响性能。
问题内容: 我想转换为字节数组,但是返回32个字节而不是16个字节。 问题答案: 我认为发问者正在将十六进制值的字符串表示形式转换为表示该十六进制值的字节数组。 apache commons编解码器为此提供了一个类Hex。
问题内容: 我有一个很长的十六进制字符串,代表一系列不同类型的值。我希望将此十六进制字符串转换为字节数组,以便可以将每个值移出并将其转换为适当的数据类型。 问题答案: 假设您的十六进制字符串类似于 将其转换为字符串(Python≤2.7): 或从Python 2.7和Python 3.0开始: 请注意,这是的不变版本。
将可变长度十六进制字符串(例如,转换为包含该数据的字节数组的最佳方式是什么。 即转换: 进入这个 还是这个 因此,当我将此写入一个文件并将其写入hexresp-C时,我将得到包含的二进制数据。
我有一个CLinux设备,我需要转换一些数据。输入类似于 我需要 这是我尝试过的代码,但它不能编译,因为sstream不在设备操作系统上。有人能给我另一个转换数据的解决方案吗?
问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:
我需要以十六进制表示形式将字符串转换为字节数组。例如: 值:06000002我需要的是: 如何做到这一点?