将字符串地址转换为实际的二进制格式

Convert the string address into an actual binary format

我正在尝试接受来自用户 00401521 的大端地址,然后将其转换为小端形式的十六进制地址

我正在尝试的代码是

if len(addr) != 8:
    raise ValueError("Required the address as 00000000")
a, b, c, d = addr[:2], addr[2:4], addr[4:6], addr[6:]
addr = "\x%s\x%s\x%s\x%s" % (d, c, b, a)
print(addr)

这很好用,但是当我改变时

- addr = "\x%s\x%s\x%s\x%s" % (d, c, b, a)
+ addr = "\x%s\x%s\x%s\x%s" % (d, c, b, a)

失败并显示以下消息

我要存储在 addr 变量中的值恰好是 \x21\x15\x40\x00

请注意值“00401521”既不是大端也不是小端。当您查看整数值时,字节顺序不适用。在将其存储为字节之前,它不会变成字节序。

你想要“\x21\x15\x40\x00”的愿望很奇怪。 “\x21”是感叹号,“\x40”是@符号,通常会这样输入。确切地说,将如何使用这个值?因为我怀疑这不是您真正想要的表示形式。此代码将值转换为 4 字节字符串,它可以作为 4 字节缓冲区发送到设备,但打印时,Python 将使用 \x 符号显示不可打印字符.

import struct

addr = '00401521'

b = struct.pack('I', int(addr,16))
print(b)

输出:

b'!\x15@\x00'