python-3.x 反转包含十六进制字符的字符串的字节顺序

g6ll5ycj  于 2022-12-20  发布在  Python
关注(0)|答案(5)|浏览(210)

我有一个十六进制字符的长字符串,例如:

string = "AA55CC3301AA55CC330F234567"

我在用

string.to_bytes(4, 'little')

我希望最后一个字符串如下所示:

6745230F33CC55AA0133CC55AA

但我收到一个错误
第一个月
这是怎么回事?

pbpqsu0x

pbpqsu0x1#

to_bytes只适用于整数afaik。
您可以使用bytearray

>>> ba = bytearray.fromhex("AA55CC3301AA55CC330F234567")
>>> ba.reverse()

使用format将其转换回字符串:

>>> s = ''.join(format(x, '02x') for x in ba)
>>> print(s.upper())
6745230F33CC55AA0133CC55AA
ejk8hzay

ejk8hzay2#

要在小端和大端之间进行转换,可以使用基于int.to_bytesint.from_bytesconvert_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')
6tr1vspr

6tr1vspr3#

请注意,您的问题与2009年的问题非常相似。旧线程要求单向转换,而您要求“反之亦然”转换,无论您以哪种字节序开头,实际上都是一回事。让我演示一下,

0x12345678 -> 0x78563412 -> 0x12345678

使用pwntools(专为软件破解而开发的工具)转换非常容易,特别是为了避免打包-解包混乱,pwntools embeds p32() function for exact this purpose

import pwntools

x2 = p32(x1)
3zwjbxry

3zwjbxry4#

这是你要找的答案/代码吗?

def little(string):
 t= bytearray.fromhex(string)
 t.reverse()
 return ''.join(format(x,'02x') for x in t).upper()
little(s=AA55CC3301AA55CC330F234567)
lfapxunr

lfapxunr5#

也许你可以用一种方法来反转字符串

string = "AA55CC3301AA55CC330F234567"[::-1]

相关问题