Python十六进制


76

如何将十进制转换为以下格式的十六进制(至少两位,零填充,没有0x前缀)?

输入:255 输出:ff

输入:2 输出:02

我尝试过,hex(int)[2:]但似乎它显示了第一个示例,但没有显示第二个示例。



我尝试了hex(int)[2:],但它似乎显示了第一个示例,但没有显示第二个示例。
VikkyB

如果没有明确说明“以下格式”的含义,则问题和答案的用处不大。可能是“至少两位零填充,没有0x前缀”?
LarsH '17

Answers:


151

format()函数'02x'格式一起使用。

>>> format(255, '02x')
'ff'
>>> format(2, '02x')
'02'

02部分format()要求使用至少2位数字,并使用零将其填充到长度,x表示小写的十六进制。

格式规范的迷你语言也给你X大写十六进制输出,并且可以前缀字段宽度与#以包括0x0X前缀(取决于你阉羊使用xX作为格式化器)。只需考虑到您需要调整字段宽度以允许那些额外的2个字符:

>>> format(255, '02X')
'FF'
>>> format(255, '#04x')
'0xff'
>>> format(255, '#04X')
'0XFF'

我遇到一个问题,如果将格式设置为使用大写十六进制输出,则十六进制前缀将使用大写的“ X”。在您的示例中似乎并非如此。这只是我的本地Python版本的问题吗?我正在使用2.7.9版。
jwp36

@ jwp36:不,这是我的回答有误,现已纠正。我很抱歉。
马丁·彼得斯

3
在输出字符串中指定格式'{:02x}'.format(255)
JuanPablo

1
@JuanPablo:只能在较大的字符串中执行此操作str.format()仅使用它来解析一个插槽就可以使Python做更多的工作(因为在内部它仍然format(255, '02x')用于那个插槽)。
马丁·彼得斯


-8

另一个解决方案是:

>>> "".join(list(hex(255))[2:])
'ff'

可能是一个过时的答案,但是很有用。


2
与其他答案一样,这不会使填充为零。例如,"".join(list(hex(2))[2:])计算结果为'2',而不是'02'
therealrootuser 2014年

1
这与hex(int)[2:]问题是同义的。您为什么要列出一个清单以便再次加入?
wjandrea

如果您已经同意有更好的答案,为什么还要发布此答案?
ryry1985 '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.