如何将int转换为十六进制字符串?

pyn*_*oob 196 python string int hex

我想将一个整数(即<= 255)转换为十六进制字符串表示

例如:我想传入65并离开'\x41',或者255得到'\xff'.

我已经尝试用struct.pack('c',65 做这个),但是9因为它想要接受单个字符串,所以上面的任何东西都会窒息.

Mik*_*ham 199

您正在寻找这个chr功能.

您似乎混合了整数的十进制表示和整数的十六进制表示,因此您不需要完全清楚.根据您给出的描述,我认为其中一个片段显示了您想要的内容.

>>> chr(0x65) == '\x65'
True


>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
Run Code Online (Sandbox Code Playgroud)

请注意,这与包含整数为十六进制的字符串完全不同.如果这是你想要的,使用hex内置.

  • 我认为chr将整数转换为ascii.在这种情况下,chr(65)='A'.这是新增加的吗? (2认同)
  • @diedthreetimes,`chr`根本不涉及ASCII - 它只需要一个数字并生成一个字节的字节串,其中字节的序数值就是数字.当您编写和显示字节串时,ASCII和ASCII兼容的编码会起作用. (2认同)

Gre*_*ray 129

这会将整数转换为带有0x前缀的2位十六进制字符串:

strHex = "0x%0.2X" % 255
Run Code Online (Sandbox Code Playgroud)

  • 这个答案可能解决了人们感兴趣的最常见的情况 (3认同)
  • 我建议在这里编辑代码并将其更改为:strHex = "0x%0.2X" % integerVariable。(我无法编辑自己。) (2认同)

Fel*_*ing 53

怎么样hex()

hex(255)  # 0xff
Run Code Online (Sandbox Code Playgroud)

如果你真的想要\在前面,你可以这样做:

print '\\' + hex(255)[1:]
Run Code Online (Sandbox Code Playgroud)


Daw*_*wid 42

尝试:

"0x%x" % 255 # => 0xff
Run Code Online (Sandbox Code Playgroud)

要么

"0x%X" % 255 # => 0xFF
Run Code Online (Sandbox Code Playgroud)

Python文档说:"把它放在你的枕头下:http://docs.python.org/library/index.html "


小智 32

对于 Python >= 3.6,使用 f 字符串格式:

>>> x = 114514
>>> f'{x:0x}'
'1bf52'
>>> f'{x:#x}'
'0x1bf52'
Run Code Online (Sandbox Code Playgroud)


mon*_*kut 26

让我添加这个,因为有时您只想要单个数字表示:

'{:x}'.format(15)
> f
Run Code Online (Sandbox Code Playgroud)

现在使用新的f''格式字符串,您可以执行以下操作:

f'{15:x}'
> f
Run Code Online (Sandbox Code Playgroud)

注意:初始'f' f'{15:x}'用于表示格式字符串

  • 恕我直言,更“可读”的选项可以是 '0x{:X}'.format(15) (注意 X 为大写)。对于 2034,它将打印 0x7F2 而不是 7f2 (2认同)

XTL*_*XTL 11

如果要打包一个值<255(一个字节无符号,uint8_t)并最终得到一个字符的字符串的结构,您可能正在寻找格式B而不是c.C将字符转换为字符串(本身不太有用),而B转换整数.

struct.pack('B', 65)
Run Code Online (Sandbox Code Playgroud)

(是的,65是\ x41,而不是\ x65.)

struct类还可以方便地处理用于通信或其他用途的字节序.


Che*_*ang 10

(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
Run Code Online (Sandbox Code Playgroud)

例如:

>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
Run Code Online (Sandbox Code Playgroud)


小智 9

使用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'
Run Code Online (Sandbox Code Playgroud)


Luc*_*Luc 7

请注意,对于较大的值,hex()仍然有效(其他一些答案没有):

x = hex(349593196107334030177678842158399357)
print(x)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 好吧,计算机科学家期望负十六进制是以符号标志开头的东西,例如 FFFx xxxx 或 8000 xxxx,而不是实际的符号。我以前从未见过带有减号的六角形。但如果你这样说......;) (2认同)

Pro*_*gue 7

您还可以将任何基数的任何数字转换为十六进制。在这里使用这一行代码,使用起来既简单又简单:

hex(int(n,x)).replace("0x","")

您有一个字符串n,它是您的数字和x 该数字的基数。首先,将其更改为整数,然后更改为十六进制,但十六进制位于0x第一个,因此replace我们将其删除。


sha*_*m02 5

这对我来说效果最好

"0x%02X" % 5  # => 0x05
"0x%02X" % 17 # => 0x11
Run Code Online (Sandbox Code Playgroud)

如果您想要一个更大的宽度(2是2个十六进制打印字符),请更改(2),这样3将为您提供以下内容

"0x%03X" % 5  # => 0x005
"0x%03X" % 17 # => 0x011
Run Code Online (Sandbox Code Playgroud)