首页 > 解决方案 > 如何将python 2.7中的字节数组转换为十进制字符串?

问题描述

我有以下字节数组

>>> string_ba
bytearray(b'4\x00/\t\xb5')

接下来的两行很容易转换为十六进制字符串:

hex_string = [chr(x).encode('hex') for x in string_ba]
hex_string = ''.join(hex_string)

那个回报

>>> hex_string.lower()
'34002f09b5'

这是预期的。(这是一个 RFID 卡签名)

我通过执行上述操作将其转换为十进制,然后在下一行从十六进制字符串转换为十进制字符串(用零填充)。我的字符串限制为 10 个字符,因此我不得不删除字符串中的前 2 个字符,以便能够将其转换为最多 10 个字符的十进制数。

dec_string = str(int(hex_string[2:], 16)).zfill(10)
>>> dec_string
'0003082677'

这是正确的,因为我使用在线转换器进行了测试(十六进制:002f09b5,十进制:3082677)问题是,如果有办法跳过从字节数组到十六进制字符串的转换,以获得十进制字符串。换句话说,直接从 bytearray 到 dec_string

这将在 Python 2.7.15 上运行。

>>> sys.version
'2.7.15rc1 (default, Apr 15 2018, 21:51:34) \n[GCC 7.3.0]'

我尝试从 bytearray 中删除第一个元素,然后将其直接转换为字符串并加入。但这并不能提供预期的结果。

string_ba = string_ba[1:]
test_string = [str(x) for x in string_ba]
test_dec_string = ''.join(test_string).zfill(10)

>>> test_dec_string
'0000479181'

重复这个问题有没有办法直接从字节数组到十进制字符串

标签: pythonarraysstringpython-2.7decimal

解决方案


您可以使用 struct library 将 bytearray 转换为十进制。https://codereview.stackexchange.com/questions/142915/converting-a-bytearray-into-an-integer也许对你有帮助


推荐阅读