我想将一个整数(小于等于255)转换成十六进制字符串表示。
例如:我想传入65
并得到'\x41'
,或者传入255
并得到'\xff'
。
我尝试使用struct.pack('c',
65)
实现,但是它只接受单个字符字符串,因此无法处理大于9
的数字。
你需要寻找chr
函数。
看起来你混淆了整数的十进制表示和十六进制表示,所以不是很清楚你需要什么。根据你提供的描述,我认为以下代码片段中的一个展示了你想要的。
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
请注意这与包含十六进制整数的字符串是非常不同的。如果您需要这样的话,请使用内置的hex
。
这个代码会将一个整数转换为带有0x前缀的两位十六进制字符串:
strHex = "0x%0.2X" % integerVariable
repr(chr(255)) # '\xff'
也可以实现这个功能。 - Glenn 'devalias' Grant有时候你只需要得到单个数字的表示方式,可以使用以下代码(x
可以是小写的 'x' 或者大写的 'X',这会决定输出的字母是大写还是小写):
'{:x}'.format(15)
> f
现在,使用新的f''
格式化字符串,您可以执行以下操作:
f'{15:x}'
> f
要添加0填充,可以使用0>n
:
f'{2034:0>4X}'
> 07F2
注意:在
f'{15:x}'
中,初始的 'f' 表示格式化字符串
尝试:
"0x%x" % 255 # => 0xff
或者"0x%X" % 255 # => 0xFF
Python文档中说:“把这个放在你的枕头下面:http://docs.python.org/library/index.html”
"%#x" % 255
:) - VxJasonxV对于 Python >= 3.6 版本,使用 f-string 格式化:
>>> x = 114514
>>> f'{x:0x}'
'1bf52'
>>> f'{x:#x}'
'0x1bf52'
使用format()
,如format-examples所示,我们可以做到:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
struct.pack('B', 65)
(是的,65是\x41,而不是\x65。)
结构体类还可以方便地处理通信或其他用途的字节序。
请注意,对于大数值,hex()
仍然有效(某些其他答案则不行):
x = hex(349593196107334030177678842158399357)
print(x)
Python 2:0x4354467b746f6f5f736d616c6c3f7dL
Python 3:0x4354467b746f6f5f736d616c6c3f7d
要解密RSA消息,可以按以下步骤操作:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
hex(hash(text))
,它产生了一个负整数,导致带有减号的十六进制字符串。谁实现了这个? - JPT(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
例如:>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
chr
并不涉及ASCII——它只是将一个数字转换为一个字节串,其中字节的序数值就是这个数字。当您编写和显示字节串时,ASCII和ASCII兼容编码才会起作用。 - Mike Graham'A'
成为另一种写法和显示'\x41'
的方式进入。所有str
真正关心的是这是65。为了使人类能够理解和使用它,它经常变成一个A。@diedthreetimes - Mike Graham