繁体   English   中英

在Python中将字符串从big-endian转换为little-endian,反之亦然

[英]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]

to_bytes仅适用于整数afaik。

您可以使用bytearray

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

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

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

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

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_bytesint.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM