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

问题描述 投票:0回答:15

我想取一个整数(即<= 255), to a hex string representation

例如:我想传入

65
并退出
'\x41'
,或者
255
并获得
'\xff'

我尝试使用

struct.pack('c',
65
)
执行此操作,但是对于
9
以上的任何内容都会感到窒息,因为它想要接受单个字符串。

python string hex int
15个回答
282
投票

您正在寻找

chr
功能。

您似乎混合了整数的十进制表示形式和整数的十六进制表示形式,因此并不完全清楚您需要什么。根据您提供的描述,我认为其中一个片段显示了您想要的内容。

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


>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True

请注意,这与包含十六进制整数的字符串有很大不同。如果这就是您想要的,请使用内置的

hex


155
投票

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

strHex = "0x%0.2X" % integerVariable

91
投票

hex()
呢?

hex(255)  # 0xff

如果你真的想在前面有

\
,你可以这样做:

print '\\' + hex(255)[1:]

80
投票

让我添加这个,因为有时您只需要一位数字表示

x
可以是小写“x”或大写“X”,选择决定输出字母是大写还是小写。)

'{:x}'.format(15)
> f

现在使用新的

f''
格式字符串,您可以执行以下操作:

f'{15:x}'
> f

要添加 0 填充,您可以使用

0>n
:

f'{2034:0>4X}'
> 07F2

注意:

f'{15:x}'
中的首字母“f”表示格式字符串


51
投票

尝试:

"0x%x" % 255 # => 0xff

"0x%X" % 255 # => 0xFF

Python 文档说:“将其放在枕头下:http://docs.python.org/library/index.html


31
投票

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

>>> x = 114514
>>> f'{x:0x}'
'1bf52'
>>> f'{x:#x}'
'0x1bf52'

13
投票

如果你想打包一个带有值的结构体<255 (one byte unsigned, uint8_t) and end up with a string of one character, you're probably looking for the 格式B而不是c。 C 将字符转换为字符串(本身不太有用),而 B 转换整数。

struct.pack('B', 65)

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

结构类还可以方便地处理字节顺序以进行通信或其他用途。


12
投票

请注意,对于较大的值,

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

12
投票

使用

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'

10
投票
(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'

8
投票

这对我来说效果最好

"0x%02X" % 5  # => 0x05
"0x%02X" % 17 # => 0x11

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

"0x%03X" % 5  # => 0x005
"0x%03X" % 17 # => 0x011

7
投票

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

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

您有一个字符串

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


4
投票

我想要将一个随机整数转换为以 # 开头的六位十六进制字符串。为了得到这个我用了

"#%6x" % random.randint(0xFFFFFF)

0
投票

使用f字符串,很容易解析并且相当灵活:

print(f'{255:x}')         # => 'ff'   
print(f'{15:2x}')         # => ' f'    
print(f'{15:02x}')        # => '0f'    
print(f'\\x{15:02x}')     # => '\x0f'  

-1
投票

作为替代表示,您可以使用

[in] '%s' % hex(15)
[out]'0xf'
© www.soinside.com 2019 - 2024. All rights reserved.