首页 > 解决方案 > 在 Python 中从给定的长十六进制数中获取 8 位数字

问题描述

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

 0110200a03

所以,我需要从这个得到 8 位二进制数,我想显示这个十六进制数看起来像这样:

00000001 00010000 00100000 00001011 00000011

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

我这样写的程序:

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()

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

100010000001000000000101000000011

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

有没有办法做到这一点?

标签: pythonpython-3.x

解决方案


只需在其前面添加 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

推荐阅读