[英]Convert string from big-endian to little-endian or vice versa in Python
我有一个十六进制字符的长字符串。
例如:
string = "AA55CC3301AA55CC330F234567"
我正在使用
string.to_bytes(4, 'little')
我希望最终的字符串如下:
6745230F33CC55AA0133CC55AA
但我收到一个错误
AttributeError: 'str' object has no attribute 'to_bytes'
怎么了
也许您可以反转字符串的一种方法是
string = "AA55CC3301AA55CC330F234567"[::-1]
这是您要找的答案/代码吗?
def little(string):
t= bytearray.fromhex(string)
t.reverse()
return ''.join(format(x,'02x') for x in t).upper()
little(s=AA55CC3301AA55CC330F234567)
请注意,您的问题与2009年以来的问题非常相似。 尽管旧线程要求单向转换,而您要求“反之亦然”转换,但无论您以哪种字节序开头,它实际上都是同一回事。 让我展示,
0x12345678 -> 0x78563412 -> 0x12345678
使用pwntools
(为软件黑客创建的工具)进行转换非常容易。 特别是,为了避免拆包乱七八糟, pwntools嵌入了p32()函数来达到此目的。
import pwntools
x2 = p32(x1)
要在小端和大端之间转换,可以使用基于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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.