如何让Python在打印十六进制值时使用大写字母?

如何让Python在打印十六进制值时使用大写字母?,python,formatting,hex,uppercase,Python,Formatting,Hex,Uppercase,在Python v2.6中,我可以通过以下两种方式之一获取整数的十六进制: print(("0x%x")%value) print(hex(value)) 但是,在这两种情况下,十六进制数字都是小写。如何以大写形式获取这些内容?大写X(Python 2和3使用): 或者在python 3+中(使用): 或者在python 3.6+中(使用): 使用大写字母%X: >>> print("%X" % 255) FF Python3.6时代的更新:只需在格式部分的f字符串中使用“

在Python v2.6中,我可以通过以下两种方式之一获取整数的十六进制:

print(("0x%x")%value)
print(hex(value))
但是,在这两种情况下,十六进制数字都是小写。如何以大写形式获取这些内容?

大写X(Python 2和3使用):

或者在python 3+中(使用):

或者在python 3.6+中(使用):


使用大写字母
%X

>>> print("%X" % 255)
FF
Python3.6时代的更新:只需在格式部分的f字符串中使用“X”:

print(f"{255:X}")
(f-strings接受
前面的任何有效Python表达式-包括直接数字表达式和变量名)

只需使用upper()

输出:

Upper hexadecimal number =  0X4D2

使用f-strings的Python 3习惯用法更多的是:

value = 1234
print(f'0x{value:X}')
'0x4D2'
注意事项(以及为什么这不是副本):

  • 演示如何避免将“0x”前缀大写,这是其他答案中的一个问题
  • 显示如何获取变量插值
    f'{value}'
    ;实际上,没有人将(硬编码的)十六进制文字放入实代码中。在执行变量插值时有很多陷阱:它既不是
    f'{x:value}
    也不是
    f'{0x:value}
    也不是
    f'{value:0x}'
    甚至不是
    f'{value:%x}'
    。有很多种方法会让你绊倒。在重读了四篇教程和whatsnew文档之后,我仍然花了15分钟的反复试验来获得语法。这个答案说明了如何正确地进行f字符串变量插值;其他人则不然
打印(十六进制(值).upper().替换('X','X'))


正确处理负数。

但我认为“0X4D2”不是正确的表示法。它应该是“0x4D2”(小写字母“x”)。%x最好@彼得莫滕森是正确的。这样,您就需要一些笨拙的东西,比如
'.join(['0x',hex(value).upper()[2:]])
请参阅我的答案,了解更多使用f-strings的Python 3习惯用法:
print(f'0x{value:X}')
是。我是说,
%
是2.x遗留下来的旧操作符,虽然没有正式反对,但不鼓励使用。就像我们从3.0和
.format()
以来一直想要的那样。如果它在Python3的所有发布版本中的6/8版本上都失败了,那么它就不是什么“Python3习惯用法”(尽管承认大多数版本是EOL)。“从今天起,“3.x”的意思是“3.6+”或“3.7”-以我的经验,这不是真的。对我来说,3.x意味着“我的包将支持的python 3的最早版本”,通常是“所有非EOL python 3.x”。“f字串很棒”-你没有错。如果你的值为负数,所有这些都会给出错误的结果。当您想要的是
-0xFF
@wim:No时,您会得到
0x FF
,这不是a)jsbueno的答案既没有显示如何避免将“0x”前缀大写,也没有显示b)如何获得变量插值
f'{value}
;实际上,没有人在实际代码中使用十六进制文字。在做插值时也有陷阱:它不是
f'{x:value}
也不是
f'{0x:value}
也不是
f'{value:0x}'
。有很多方法可以让你绊倒。我展示了如何避免。虽然它看起来有点笨拙,但这个答案是一个解决负数的答案,也不保留X大写,但坚持X是小写的标准+1.
print(f"{255:X}")
intNum = 1234
hexNum = hex(intNum).upper()
print('Upper hexadecimal number = ', hexNum)
Upper hexadecimal number =  0X4D2
value = 1234
print(f'0x{value:X}')
'0x4D2'