在Python中从给定的长十六进制数字获取8位数字

时间:2018-10-06 07:12:35

标签: python python-3.x

我在python项目的Visual Studio上工作,我有这个十六进制数字;

sudo

因此,我需要从该数字中获取8位二进制数,并且我想显示该十六进制数如下所示:

 0110200a03

例如,每个数字末尾都会逐步显示它,例如 0 = 0000 1 = 0001 十六进制数会很长,但看起来只是一个数字,所以

我这样写的程序:

00000001 00010000 00100000 00001011 00000011

所以输出二进制文件看起来像这样:

def hex_to_words():

   print ("Enter 'x' for exit. ");
   hexdec = input("Enter any number in Hexadecimal form ");

   if hexdec == 'x':
      exit();
   else:
      dec = int(hexdec,16)
    print(hexdec + " in Binary = " + bin(dec)[2:]);

hex_to_words()

但是,当我只尝试“ 01”时,它会同时计算所有数字,但在输出中只给出“ 1”,但是我想获得“ 00000001”。

有什么办法吗?

2 个答案:

答案 0 :(得分:2)

只需在其前面添加0x即可代表十六进制数字

>>> a=0x0110200a03
>>> a
4565502467
>>> bin(a)
'0b100010000001000000000101000000011'

关于第二个问题,只需使用格式化功能

>>> a=0x1
>>> bin(a)
'0b1'
>>> a=0x1
>>> '{0:08b}'.format(a)
'00000001'

但这只是将输出格式化为8位

编辑 这会将数字转换为另一个数字,该数字前面填充有零,并将该数字的切片切成8个块并显示

from __future__ import print_function   
import math
a=0x0110200a03
string=bin(a)[2:]
length=len(string)
resultingnumberlength=int(math.ceil((length)/float(8)))
resultnumber=string.zfill(resultingnumberlength*8)
for binarystring in range(0,len(resultnumber),8):
    print(resultnumber[binarystring:binarystring+8],end=" ")
print()

输出

00000001 00010000 00100000 00001010 00000011

答案 1 :(得分:0)

一种可能的解决方案是使用bitstring。修改代码:

import bitstring as bs

def hex_to_words():
    print("Enter 'x' for exit. ")
    hexdec = input("Enter any number in Hexadecimal form ")

    if hexdec == 'x':
        exit()
    else:
        dec = int(hexdec,16)
        b=bin(dec)
        b=bs.BitArray(b)
        b=[ byte for byte in b.cut(8)]
        print([x.bin for x in b])