如何在Python中使用不带0x的hex()?

mah*_*ood 76 python

hex()python中的函数将前导字符0x放在数字的前面.无论如何要告诉它不要把它们放?所以0xfa230fa230.

代码是

import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
   f.write(hex(int(line)))
   f.write('\n')
Run Code Online (Sandbox Code Playgroud)

jam*_*lak 154

>>> format(3735928559, 'x')
'deadbeef'
Run Code Online (Sandbox Code Playgroud)

  • 一定要喜欢ole`deadbeef`的例子.而`format()`是最好的方法. (30认同)
  • 格式中的参数应为`int`.谢谢 (2认同)

eum*_*iro 50

使用此代码:

'{:x}'.format(int(line))
Run Code Online (Sandbox Code Playgroud)

它允许您指定一些数字:

'{:06x}'.format(123)
# '00007b'
Run Code Online (Sandbox Code Playgroud)

对于Python 2.6使用

'{0:x}'.format(int(line))
Run Code Online (Sandbox Code Playgroud)

要么

'{0:06x}'.format(int(line))
Run Code Online (Sandbox Code Playgroud)

  • 使用`format()`函数更容易,您不使用任何模板功能,只使用格式化.如果你的所有模板都包含`{:..}`for*one*value,请改为`format(value,'..')`. (7认同)

Gui*_*tre 12

你可以简单地写

hex(x)[2:]
Run Code Online (Sandbox Code Playgroud)

删除前两个字符.

  • 如果`x`为负,这将会中断. (8认同)
  • 这对于未来的输出变化是不安全的。 (3认同)
  • 同样在带有长数字的 Python 2 中,它会产生奇怪的输出:`>>> hex(3735928559)[2:]` `'deadbeefL'` (3认同)

Gri*_*ave 7

Python 3.6及更高版本:

>>> i = 240
>>> f'{i:02x}'
'f0'
Run Code Online (Sandbox Code Playgroud)


msv*_*kon 6

旧样式的字符串格式:

In [3]: "%02x" % 127
Out[3]: '7f'
Run Code Online (Sandbox Code Playgroud)

新风格

In [7]: '{:x}'.format(127)
Out[7]: '7f'
Run Code Online (Sandbox Code Playgroud)

使用大写字母作为格式字符会产生大写十六进制

In [8]: '{:X}'.format(127)
Out[8]: '7F'
Run Code Online (Sandbox Code Playgroud)

文件在这里。


Mac*_*ski 6

'x'- 输出以 16 为基数的数字,9 以上的数字使用小写字母。

>>> format(3735928559, 'x')
'deadbeef'
Run Code Online (Sandbox Code Playgroud)

'X'- 输出以 16 为基数的数字,9 以上的数字使用大写字母。

>>> format(3735928559, 'X')
'DEADBEEF'
Run Code Online (Sandbox Code Playgroud)

您可以在 Python 文档中找到更多相关信息:


Ami*_*ani 6

F 弦

\n

Python 3 的格式化文字字符串(f 字符串)支持格式规范迷你语言,它指定x十六进制数字。输出不包括0x.

\n

所以你可以这样做:

\n
>>> f"{3735928559:x}"\n\'deadbeef\'\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅其他基数的规范,例如二进制、八进制等。

\n

编辑:str.removeprefix

\n

从Python 3.9开始,现在有一种str.removeprefix方法,它允许你编写以下更明显的代码:

\n
>>> hexadecimal = hex(3735928559)\n>>> hexadecimal.removeprefix(\'0x\')\n\'deadbeef\'\n
Run Code Online (Sandbox Code Playgroud)\n

但这对于负数 \xe2\x9d\x8c 不起作用:

\n
>>> negadecimal = hex(-3735928559)\n>>> negadecimal.removeprefix(\'0x\')\n\'-0xdeadbeef\'\n
Run Code Online (Sandbox Code Playgroud)\n