我有一个十六进制字符的长字符串,例如:
string = "AA55CC3301AA55CC330F234567"
我在用
string.to_bytes(4, 'little')
我希望最后一个字符串如下所示:
6745230F33CC55AA0133CC55AA
但我收到一个错误第一个月这是怎么回事?
pbpqsu0x1#
to_bytes只适用于整数afaik。您可以使用bytearray:
to_bytes
bytearray
>>> ba = bytearray.fromhex("AA55CC3301AA55CC330F234567") >>> ba.reverse()
使用format将其转换回字符串:
format
>>> s = ''.join(format(x, '02x') for x in ba) >>> print(s.upper()) 6745230F33CC55AA0133CC55AA
ejk8hzay2#
要在小端和大端之间进行转换,可以使用基于int.to_bytes和int.from_bytes的convert_hex函数:
int.to_bytes
int.from_bytes
convert_hex
def int2bytes(i, enc): return i.to_bytes((i.bit_length() + 7) // 8, enc) def convert_hex(str, enc1, enc2): return int2bytes(int.from_bytes(bytes.fromhex(str), enc1), enc2).hex() be = "AA55CC3301AA55CC330F234567" convert_hex(be, 'big', 'little')
6tr1vspr3#
请注意,您的问题与2009年的问题非常相似。旧线程要求单向转换,而您要求“反之亦然”转换,无论您以哪种字节序开头,实际上都是一回事。让我演示一下,
0x12345678 -> 0x78563412 -> 0x12345678
使用pwntools(专为软件破解而开发的工具)转换非常容易,特别是为了避免打包-解包混乱,pwntools embeds p32() function for exact this purpose
pwntools
import pwntools x2 = p32(x1)
3zwjbxry4#
这是你要找的答案/代码吗?
def little(string): t= bytearray.fromhex(string) t.reverse() return ''.join(format(x,'02x') for x in t).upper() little(s=AA55CC3301AA55CC330F234567)
lfapxunr5#
也许你可以用一种方法来反转字符串
string = "AA55CC3301AA55CC330F234567"[::-1]
5条答案
按热度按时间pbpqsu0x1#
to_bytes
只适用于整数afaik。您可以使用
bytearray
:使用
format
将其转换回字符串:ejk8hzay2#
要在小端和大端之间进行转换,可以使用基于
int.to_bytes
和int.from_bytes
的convert_hex
函数:6tr1vspr3#
请注意,您的问题与2009年的问题非常相似。旧线程要求单向转换,而您要求“反之亦然”转换,无论您以哪种字节序开头,实际上都是一回事。让我演示一下,
使用
pwntools
(专为软件破解而开发的工具)转换非常容易,特别是为了避免打包-解包混乱,pwntools embeds p32() function for exact this purpose3zwjbxry4#
这是你要找的答案/代码吗?
lfapxunr5#
也许你可以用一种方法来反转字符串