Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将int转换为十六进制字符串?_Python_String_Hex_Int - Fatal编程技术网

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

Python 如何将int转换为十六进制字符串?,python,string,hex,int,Python,String,Hex,Int,我想取一个整数(即您正在寻找的chr函数) 您似乎混合了整数的十进制表示和整数的十六进制表示,因此不完全清楚您需要什么 >>> chr(0x65) == '\x65' True >>> hex(65) '0x41' >>> chr(65) == '\x41' True 请注意,这与包含十六进制整数的字符串大不相同。如果这是您想要的,请使用内置的hex。尝试: "0x%x" % 255 # => 0xff 或 Python文档说:

我想取一个整数(即您正在寻找的
chr
函数)

您似乎混合了整数的十进制表示和整数的十六进制表示,因此不完全清楚您需要什么

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


>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
请注意,这与包含十六进制整数的字符串大不相同。如果这是您想要的,请使用内置的
hex

尝试:

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

Python文档说:“把这个放在枕头下面:”

怎么样

如果您确实想让
\
在前面,您可以执行以下操作:

print '\\' + hex(255)[1:]
f'{15:x}'
> f

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

strHex = "0x%0.2X" % 255

如果你想用一个值打包一个结构,我想把一个随机整数转换成一个六位数的十六进制字符串,开头加一个#

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

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

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

这对我最有效

"0x%02X" % 5  # => 0x05
"0x%02X" % 17 # => 0x11
如果您想要一个更大宽度的数字(2代表2个十六进制打印字符),请更改(2),这样3将为您提供以下信息

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

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

[in] '%s' % hex(15)
[out]'0xf'

让我加上这个,因为有时候你只需要一位数的表示

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

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

print '\\' + hex(255)[1:]
f'{15:x}'
> f
要添加0填充,可以使用
0>n

f'{2034:0>4X}'
> 07F2
注意:
f'{15:x}'
中的首字母“f”表示格式字符串

使用
format()
,根据,我们可以执行以下操作:

>>> # 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'
例如:

>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'

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

hex(int(n,x))。替换(“0x”,”)


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

我想您的意思是
“#6x”%random.randint(0x0,0xFFFFFF)
。(在
6
之前缺少一个
%
,并且
randint
接受两个参数-下限和上限-)如果不需要空格,则应为%06x。我认为chr将整数转换为ascii。在这种情况下,chr(65)='A'。这是一个新的加法吗?@diedthreetimes,
chr
根本不涉及ASCII——它只需要一个数字,然后通过testring生成一个单字节的bytestring,其中字节的序数值就是数字。当您编写和显示bytestring时,ASCII和ASCII兼容的编码起作用。@diedthreetimes,例如,它们通过
'A'
另一种编写和显示
'\x41'
的方法。str真正关心的是这是65。为了让人们能够理解和使用,它经常变成A。
repr(chr(255))\xff'
也实现了这一点。我建议在这里编辑代码并将其更改为:strHex=“0x%0.2X”%integerVariable。(我无法编辑自己。)我花在查找struct.pack('B',)上的时间太长了。谢谢。关于这个简洁的特性,请参考PEP 498——文字字符串插值IMHO,更“可读”的选项可以是“0x{:X}”。格式(15)(注意X是大写的)。对于2034,它将打印0x7F2而不是7f2
hex(int(n,x))[2:
-不确定哪一个更快:)
“%\x”%255
:)好吧。。。没有。我尝试了
hex(hash(text))
,它产生了一个负整数,结果是一个带负号的十六进制字符串。谁实施了这个?@JPT我不明白你的问题。如果该值为负数,那么显然十六进制值将有一个减号。为什么在用十六进制、二进制、十进制或任何其他数字系统书写时会有所不同?或者你是在寻找内存中的表示,其中有一个位通过设置或取消设置来确定符号?好吧,计算机科学家希望负十六进制是以符号标志开始的东西,例如FFFx xxxx或8000 xxxx,而不是实际的符号。我以前从未见过带负号的十六进制。但如果你这样说……;)
f'{2034:0>4X}'
> 07F2
>>> # 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'
(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'