我想取一个整数(这将是<= 255),以十六进制字符串表示
例:我想传入65并得到'\x41',或者255并得到'\xff'。
我尝试过用struct.pack('c',65)这样做,但它会阻塞任何超过9的东西,因为它想要接受单个字符串。
我想取一个整数(这将是<= 255),以十六进制字符串表示
例:我想传入65并得到'\x41',或者255并得到'\xff'。
我尝试过用struct.pack('c',65)这样做,但它会阻塞任何超过9的东西,因为它想要接受单个字符串。
当前回答
如果你想打包一个值<255(一个字节无符号,uint8_t)的结构体,并以一个字符的字符串结束,你可能会寻找格式B而不是c。c将字符转换为字符串(本身不是太有用),而B转换为整数。
struct.pack('B', 65)
(是的,65是\x41,而不是\x65。)
结构类还可以方便地处理通信或其他用途的字节顺序。
其他回答
对于Python >= 3.6,使用f-string格式:
>>> x = 114514
>>> f'{x:0x}'
'1bf52'
>>> f'{x:#x}'
'0x1bf52'
如果你想打包一个值<255(一个字节无符号,uint8_t)的结构体,并以一个字符的字符串结束,你可能会寻找格式B而不是c。c将字符转换为字符串(本身不是太有用),而B转换为整数。
struct.pack('B', 65)
(是的,65是\x41,而不是\x65。)
结构类还可以方便地处理通信或其他用途的字节顺序。
你可以用另一种表达方式
[in] '%s' % hex(15)
[out]'0xf'
注意,对于大值,hex()仍然有效(其他一些答案不适用):
x = hex(349593196107334030177678842158399357)
print(x)
Python 2: 0x4354467b746f6f5f736d616c3f7dl 蟒蛇3:0x4354467b746f6f5f736d616c3f7d
对于解密的RSA消息,可以执行以下操作:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
那么hex()呢?
hex(255) # 0xff
如果你真的想要有\在前面,你可以这样做:
print '\\' + hex(255)[1:]