【发布时间】:2012-11-07 20:14:07
【问题描述】:
在 Python v2.6 中,我可以通过以下两种方式之一获取整数的十六进制:
print(("0x%x")%value)
print(hex(value))
但是,在这两种情况下,十六进制数字都是小写的。我怎样才能得到这些大写?
【问题讨论】:
标签: python formatting hex uppercase
在 Python v2.6 中,我可以通过以下两种方式之一获取整数的十六进制:
print(("0x%x")%value)
print(hex(value))
但是,在这两种情况下,十六进制数字都是小写的。我怎样才能得到这些大写?
【问题讨论】:
标签: python formatting hex uppercase
大写 X(Python 2 和 3 使用 sprintf-style formatting):
print("0x%X" % value)
或者在 python 3+ 中(使用.format string syntax):
print("0x{:X}".format(value))
或者在 python 3.6+ 中(使用formatted string literals):
print(f"0x{value:X}")
【讨论】:
print(f'0x{value:X}')
% 是来自 2.x 的较旧的操作员宿醉,虽然没有正式弃用,但不鼓励使用。 Python 3.6+ finally allows variable interpolation 就像我们从 3.0 和 .format() 以来一直想要的那样。
-0xFF时,你会得到0x-FF。
只需使用upper()。
intNum = 1234
hexNum = hex(intNum).upper()
print('Upper hexadecimal number = ', hexNum)
输出:
Upper hexadecimal number = 0X4D2
【讨论】:
''.join([ '0x', hex(value).upper()[2:] ]) 这样笨重的东西
使用大写的%X:
>>> print("%X" % 255)
FF
Python 3.6 时代的更新:只需在格式部分使用“X”,在 f-strings 中:
print(f"{255:X}")
(f-strings 接受: 之前的任何有效 Python 表达式 - 包括直接数字表达式和变量名)。
【讨论】:
print(hex(value).upper().replace('X', 'x'))
正确处理负数。
【讨论】:
更多使用 f-strings 的 Python 3 习惯用法是:
value = 1234
print(f'0x{value:X}')
'0x4D2'
注释(以及为什么这不是重复的):
f'{value}';实际上没有人将(硬编码)十六进制文字放入实际代码中。进行变量插值有很多陷阱:它不是f'{x:value}',也不是f'{0x:value}',也不是f'{value:0x}',甚至不是f'{value:%x}',我也试过了。绊倒的方法有很多。在重新阅读了四个教程和 whatsnew 文档后,我仍然花了 15 分钟的反复试验来获得语法。这个答案显示了如何正确获得 f 字符串变量插值;其他人没有。【讨论】:
f'{value}';没有人真正将十六进制文字放入实际代码中。做插值也有陷阱:不是f'{x:value}',也不是f'{0x:value}',也不是f'{value:0x}'。绊倒的方法很多。我展示了如何不这样做。