将十六进制转换为数组中的二进制

时间:2018-10-16 08:57:06

标签: python python-3.x

我正在Visual Studio上研究python Project和类似010203的用户输入, 我使用以下代码来节省输入量:

dynamic_array = [ ] 
hexdec = input("Enter the hex number to binary ");
strArray = [hexdec[idx:idx+2]  for idx in range(len(hexdec)) if idx%2 == 0]
dynamic_array = strArray
print(dynamic_array[0] + " IAM" )  
print(dynamic_array[1] + " NOA" )
print(dynamic_array[2] + " FCI" )

因此,输出为:

01 IAM
02 NOA
03 FCI

但是我将十六进制数转换为二进制数的预期输出如下:

00000001 IAM
00000010 NOA
00000011 FCI

有什么办法吗?

3 个答案:

答案 0 :(得分:3)

如果您将十六进制作为整数(数字),则容易得多。
关于如何将整数转换为不同结果的技巧很多,但是.format()是一个有用的字符串表示工具,可以将整数(和其他整数)格式化为各种输出。

这是以下各项的组合:

解决方案是:

binary = '{:08b}'.format(int(hex_val, 16))

最终结果代码如下:

def toBin(hex_val):
    return '{:08b}'.format(int(hex_val, 16)).zfill(8)

hexdec = input("Enter the hex number to binary ");
dynamic_array = [toBin(hexdec[idx:idx+2]) for idx in range(len(hexdec)) if idx%2 == 0]
print(dynamic_array[0] + " IAM" )  
print(dynamic_array[1] + " NOA" )
print(dynamic_array[2] + " FCI" )

罗希特(Rohit)还提出了一个很好的解决方案,但我建议您将toBin()的内容换成bin(int()),而不是按照每个打印语句来做。

我还对代码进行了一些重组,因为用空列表初始化dynamic_array毫无意义。 Python不需要在为变量赋值之前先设置变量。创建strArray只是用它替换空的dynamic_array也没有意义,因此将三行连接成一行。

machnic还指出了一个很好的编程技巧,即在整个字符串上使用format()。使得代码很易读:)

希望这会有所帮助,并且我的提示有意义。

答案 1 :(得分:0)

dynamic_array = [ ] 
hexdec = input("Enter the hex number to binary ");
strArray = [hexdec[idx:idx+2]  for idx in range(len(hexdec)) if idx%2 == 0]
dynamic_array = strArray
print((bin(int(dynamic_array[0],16))[2:]).zfill(8)+ " IAM" )  
print((bin(int(dynamic_array[1],16))[2:]).zfill(8) + " NOA" )
print((bin(int(dynamic_array[2],16))[2:]).zfill(8) + " FCI")

答案 2 :(得分:0)

您可以format字符串来实现它。您的代码可能类似于:

dynamic_array = [ ] 
hexdec = input("Enter the hex number to binary ")

strArray = [hexdec[idx:idx+2] for idx in range(len(hexdec)) if idx%2 == 0]
dynamic_array = strArray
print("{:08b} IAM".format(int(dynamic_array[0])))
print("{:08b} NOA".format(int(dynamic_array[1])))
print("{:08b} FCI".format(int(dynamic_array[2])))