将十进制转换为格式化二进制和十六进制 - Python

时间:2016-01-27 16:36:00

标签: python

如何将十进制值转换为格式化二进制值和十六进制值

通常我会这样做

  binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)
  print binary(17)
  >>>> 10001

  print binary(250)
  >>>> 11111010

但是我希望给出任何给定值的8位二进制数字(仅限0-255),即我需要追加' 0'到二进制数的开头,如下面的例子

  7 = 0000 1111
 10 = 0000 1010
250 = 1111 1010

甚至我需要转换为以0x

开头的十六进制
7   = 0x07
10  = 0x0A
250 = 0xFA 

4 个答案:

答案 0 :(得分:2)

替代解决方案是使用string.format

>>> '{:08b}'.format(250)
'11111010'
>>> '{:08b}'.format(2)
'00000010'
>>> '{:08b}'.format(7)
'00000111'
>>> '0x{:02X}'.format(7)
'0x07'
>>> '0x{:02X}'.format(250)
'0xFA'

答案 1 :(得分:1)

您可以使用内置函数bin()hex(),如下所示:

In[95]: bin(250)[2:]
Out[95]: '11111010'

In[96]: hex(250)
Out[96]: '0xfa'

答案 2 :(得分:1)

你可以分别使用bin(),hex()分别为二进制和十六进制小数,并使用string.zfill()函数来实现8位二进制数。

>>> bin(7)[2:].zfill(8)
'00000111'
>>> bin(10)[2:].zfill(8)
'00001010'
>>> bin(250)[2:].zfill(8)
'11111010'
>>> 
>>> hex(7)
'0x7'
>>> hex(10)
'0xa'
>>> hex(250)
'0xfa'

我假设在十六进制中不需要前导0。

答案 3 :(得分:0)

您可以使用格式:

'{:08b}'.format(5)


'{:#x}'.format(12)