130

python中的hex()函数,将前导字符0x放在数字前面。反正有没有告诉它不要放它们?0xfa230也会如此fa230

代码是

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

9 回答 9

233
>>> format(3735928559, 'x')
'deadbeef'
于 2013-05-07T08:30:24.687 回答
67

使用此代码:

'{:x}'.format(int(line))

它还允许您指定多个数字:

'{:06x}'.format(123)
# '00007b'

对于 Python 2.6 使用

'{0:x}'.format(int(line))

或者

'{0:06x}'.format(int(line))
于 2013-05-07T08:30:30.710 回答
24

你可以简单地写

hex(x)[2:]

删除前两个字符。

于 2013-05-07T08:32:23.400 回答
18

Python 3.6+:

>>> i = 240
>>> f'{i:x}'
'f0'
于 2018-10-06T00:55:47.530 回答
7

旧式字符串格式:

In [3]: "%x" % 127
Out[3]: '7f'

新风格

In [7]: '{:x}'.format(127)
Out[7]: '7f'

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

In [8]: '{:X}'.format(127)
Out[8]: '7F'

文档在这里。

于 2013-05-07T08:30:55.207 回答
5

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

>>> format(3735928559, 'x')
'deadbeef'

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

>>> format(3735928559, 'X')
'DEADBEEF'

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

于 2021-04-19T08:42:20.937 回答
3

Python 3 的格式化文字字符串(f-strings) 支持Format Specification Mini-Language,它指定x十六进制数字。输出不包括0x.

所以你可以这样做:

>>> f"{3735928559:x}"
'deadbeef'

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

于 2021-08-16T00:53:59.347 回答
-1

虽然前面的所有答案都可以工作,但其中很多都有一些警告,比如不能同时处理正数和负数,或者只能在 Python 2 或 3 中工作。下面的版本在 Python 2 和 3 以及正数和负数中都有效数字:

由于 Python 从 hex() 返回一个字符串十六进制值,我们可以使用 string.replace 删除 0x 字符,无论它们在字符串中的位置如何(这很重要,因为这对于正数和负数是不同的)。

hexValue = hexValue.replace('0x','')

编辑: wjandrea 提出了一个很好的观点,即上述实现不处理包含 0X 而不是 0x 的值,这可能出现在 int 文字中。考虑到这个用例,您可以对 Python 2 和 3 使用以下不区分大小写的实现:

import re
hexValue = re.sub('0x', '', hexValue, flags=re.IGNORECASE)
于 2021-03-12T12:55:35.137 回答
-2

十进制到十六进制,它工作

hex(number).lstrip("0x").rstrip("L")
于 2021-07-22T13:05:52.283 回答