我正在硬编码以下函数来解码hex到binanry。它看起来不像我想要的那样优雅,但它有效。有人可以帮我概括一下代码吗?
def print_hex_to_atp(hex,output_file):
if hex=="0":
output_file.write("> Data 0 end;\n") #print hex 0 in binary
output_file.write("> Data 0 end;\n")
output_file.write("> Data 0 end;\n")
output_file.write("> Data 0 end;\n")
elif hex=="1":
output_file.write("> Data 0 end;\n") #print hex 1 in binary
output_file.write("> Data 0 end;\n")
output_file.write("> Data 0 end;\n")
output_file.write("> Data 1 end;\n")
elif hex=="2":
output_file.write("> Data 0 end;\n") #print hex 2 in binary
output_file.write("> Data 0 end;\n")
output_file.write("> Data 1 end;\n")
output_file.write("> Data 0 end;\n")
elif hex=="3":
output_file.write("> Data 0 end;\n") #print hex 3 in binary
output_file.write("> Data 0 end;\n")
output_file.write("> Data 1 end;\n")
output_file.write("> Data 1 end;\n")
elif hex=="4":
output_file.write("> Data 0 end;\n") #print hex 4 in binary
output_file.write("> Data 1 end;\n")
output_file.write("> Data 0 end;\n")
output_file.write("> Data 0 end;\n")
elif hex=="5":
output_file.write("> Data 0 end;\n")
output_file.write("> Data 1 end;\n")
output_file.write("> Data 0 end;\n")
output_file.write("> Data 1 end;\n")
elif hex=="6":
output_file.write("> Data 0 end;\n")
output_file.write("> Data 1 end;\n")
output_file.write("> Data 1 end;\n")
output_file.write("> Data 0 end;\n")
else:
c="invalid"
答案 0 :(得分:2)
您可以使用bin
函数和base
的{{1}}参数:
int
这有输出:
def hex_to_bin(h):
return bin(int(h, 16))[2:]
example = "1a"
for binary_digit in hex_to_bin(example):
print(binary_digit)
请注意,如果您向其传递无效的十六进制字符串,则会抛出1
1
0
1
0
。
如果您希望将其填充到最近的nibble,则可以执行以下操作:
ValueError
将输出:
def hex_to_bin(h):
return "{:0{}b}".format(int(h, 16), len(h) * 4)
如上所示,这两个都适用于任意长度的十六进制字符串,而不仅仅是单个数字。
这两个工作首先使用0
0
0
1
1
0
1
0
函数将十六进制字符串解析为整数,然后将该整数格式化为二进制。第二个使用Python的int
迷你语言,指定格式(format
)应该是二进制(:
),用零填充(b
) ,它应该是十六进制字符串长度的四倍(0
- > {}
)。 len(h) * 4
花括号用于表示赋予{}
的参数。第一个使用format
函数,这是不言自明的,但它必须bin
,因为[2:]
函数将bin
添加到生成的二进制文件的开头。 0b
切掉了。
重新实现原始代码应该很容易。要做到这一点,你会做这样的事情:
2:
请注意,我已将您的变量重命名为for digit in hex_to_bin(hex_s):
output_file.write("> Data {} end;\n".format(digit))
。我推荐你这样做,因为hex
是一个内置的Python函数(如果你计划使用hex,这可能会特别令人困惑)。
答案 1 :(得分:0)
您可以使用default AbstrctObjectDto map(AbstractObject value) {
if (value instanceOf SomeObject) {
// invoke mapping for SomeObject
}
//else if and more
}
将十六进制字符串解码为整数。此外,您可以使用int(..,16)
循环来获取四个不同的位,例如:
for
答案 2 :(得分:0)
hex="4"
base_10 = int(hex,16)
bin = "{0:04b}".format(base_10)
print("0x{0:02x} -> 0b{0:04b}".format(base_10) )
for bit in bin:
print("> data\t{0} end".format(bit))