python - #X 格式说明符真的应该使“0x”前缀大写吗?
问题描述
我正在尝试使用#X
格式说明符来打印使用大写字母作为“数字”的十六进制值,同时自动添加通常的0x
前缀。例如,十进制10
应表示为0xA
。
但是,该说明符似乎并没有以这种方式表现:
>>> print(f'{10:#X}')
0XA
>>> '{:#X}'.format(10)
'0XA'
看起来X
修饰符使数字的整个字符串表示形式(包括0x
前缀)通过str.upper
而不是仅通过“数字部分”。我认为这很公平,但是在检查了Format Specification Mini-Language之后,它看起来可能不是预期的结果(或者,至少没有明确记录)。以下是相关位:
该
'#'
选项导致使用“替代形式”进行转换。[...] 对于整数,当使用 [...] 十六进制输出时,此选项将前缀 [...] 添加'0x'
到输出值。[...]
可用的整数表示类型有:
类型 意义 [...] [...] 'x'
十六进制格式。输出以 16 为基数的数字,对 9 以上的数字使用小写字母。 'X'
十六进制格式。输出以 16为底的数字,对 9 以上的数字使用大写字母。 [...] [...]
这似乎意味着大写字母只能用于非十进制的十六进制数字(a
, b
, c
, d
, e
, f
),因此不应该关注x
(from 0x
);那正确吗?
解决方案
正如您已经注意到的,#X 使所有内容都大写,#x 使所有内容小写。如果您希望 0x 较低而其余部分为大写,则可以尝试以下操作:
# will print 0xA
print(f'{10:#X}'.replace('0X', '0x'))
在我看来,将 0x 中的 x 大写是愚蠢的,他们不应该以这种方式实现它,但它就是这样......
编辑: 您可以删除 # 然后它将完全删除 0x,然后您可以在格式字符串中手动添加 0x,这是我认为最好的方法:
print(f"0x{10:X}")
推荐阅读
- node.js - 编辑用户数据后如何更新passportJWT数据?
- mongodb - 如何在不删除对象的其余部分的情况下仅返回 mongo 对象数组中的一个字段
- android - 微调器项目中的文本对齐方式
- html - CSS id 选择器不适用于显示 flex
- c++ - 机器和数组元素存储的字节序
- javascript - 有没有办法修复我的 for 循环以启用或禁用基于单独列表但没有覆盖潜力的选项
- c# - 有没有办法使用 mvc 发布一个元组值?
- sql - LEFT OUTER JOIN 在 bigquery 上创建子查询时出错
- python - 对给定日期的日期和值的数量进行排序
- hystrix - 使用 FileBasedInstanceDiscovery 的 hystrix-dashboard 涡轮机的问题