为什么在Python中使用“%x”进行转换不会产生带有0x前缀的结果?

时间:2015-02-22 02:13:22

标签: python

# Write a function that does a decimal to hexadecimal conversion.
# Hint: Make use of "%x" for hexadecimal format.
def dec2hex(num): 
  return "%x" %  num

我的回答是22而不是0x22。为什么呢?

1 个答案:

答案 0 :(得分:2)

如果你想要一个前缀,你使用了错误的方法;你给出的格式只能将整数直接转换为十六进制而不带任何前缀或填充。

您可以使用hex() function返回带有0x前缀且无填充的十六进制表示:

>>> hex(34)
'0x22'

或者您可以使用format() function#x格式:

>>> format(34, '#x')
'0x22'

您想要前缀的#信号。您也可以要求它提供0-padding,但您需要指定包含前缀的字段宽度:

>>> format(34, '#06x')
'0x0022'

此处06将字段填充为6个字符,包括前缀为2的字符。

如果您唯一的选择是使用% string formatting operation,您仍然可以使用相同的技巧

>>> '%#x' % 34
'0x22'

并且填充仍然可用,具有相同的宽度警告:

>>> '%#06x' % 34
'0x0022'