将十六进制转换为二进制

152

我有ABC123EFFF。

我想要001010101111000001001000111110111111111111(即二进制表示,例如42位数字和前导零)。

如何实现?


1
我有一个 ABC123EFFF -- ABC123EFFF 是一个字符串还是数字(例如 0xABC123EFFF)? - hola
如果它是一个字符串,我在几年前在网上找到的这个lambda函数可能会有所帮助:binary = lambda x: "".join(reversed( [i+j for i,j in zip( *[ ["{0:04b}".format(int(c,16)) for c in reversed("0"+x)][n::2] for n in [1,0] ] ) ] ))binary("ABC123EFFF")'1010101111000001001000111110111111111111'对于前导零也有效。 - buzz
22个回答

3

将每个十六进制数字替换为相应的四个二进制数字:

1 - 0001
2 - 0010
...
a - 1010
b - 1011
...
f - 1111

3
用对应的8个二进制数字替换每对十六进制数字,或用对应的12个二进制数字替换每个三元组十六进制数字......或用对应的40个二进制数字替换每10个十六进制数字——糟糕!回到了起点! - pavium

2

将十六进制转换为十进制,再将十进制转换为二进制。

#decimal to binary 
def d2b(n):
    bStr = ''
    if n < 0: raise ValueError, "must be a positive integer"
    if n == 0: return '0'
    while n > 0:
        bStr = str(n % 2) + bStr
        n = n >> 1    
    return bStr

#hex to binary
def h2b(hex):
    return d2b(int(hex,16))

2

只需使用模块coden(注意:我是该模块的作者)

您可以在那里将十六进制转换为二进制。

  1. 使用pip安装
pip install coden
  1. 转换
a_hexadecimal_number = "f1ff"
binary_output = coden.hex_to_bin(a_hexadecimal_number)

转换关键字如下:

  • hex 表示十六进制
  • bin 表示二进制
  • int 表示十进制
  • _to_ - 转换函数的关键字

因此,您也可以这样格式化: 例如:hexadecimal_output = bin_to_hex(a_binary_number)


2
# Python Program - Convert Hexadecimal to Binary
hexdec = input("Enter Hexadecimal string: ")
print(hexdec," in Binary = ", end="")    # end is by default "\n" which prints a new line
for _hex in hexdec:
    dec = int(_hex, 16)    # 16 means base-16 wich is hexadecimal
    print(bin(dec)[2:].rjust(4,"0"), end="")    # the [2:] skips 0b, and the 

1

另一种方式:

import math

def hextobinary(hex_string):
    s = int(hex_string, 16) 
    num_digits = int(math.ceil(math.log(s) / math.log(2)))
    digit_lst = ['0'] * num_digits
    idx = num_digits
    while s > 0:
        idx -= 1
        if s % 2 == 1: digit_lst[idx] = '1'
        s = s / 2
    return ''.join(digit_lst)

print hextobinary('abc123efff')

如果hex_string设置为“f0”,则此操作失败。 - mikemaccana

1
ABC123EFFF的二进制版本实际上是1010101111000001001000111110111111111111。
对于几乎所有应用程序,您希望二进制版本的长度是4的倍数,并具有前导0填充。
要在Python中实现此目的:
def hex_to_binary( hex_code ):
  bin_code = bin( hex_code )[2:]
  padding = (4-len(bin_code)%4)%4
  return '0'*padding + bin_code

示例1:
>>> hex_to_binary( 0xABC123EFFF )
'1010101111000001001000111110111111111111'

例子2:
>>> hex_to_binary( 0x7123 )
'0111000100100011'

请注意,这也适用于MicroPython :)

不错。对于十六进制字符串而非十六进制值:bin_code = bin(int(hex_code, 0))[2:] - Edoardo Vignati
我认为你的意思是 bin_code = bin(int(hex_code, 16))[2:] - Stefan
没错。为了澄清我的回答:如果十六进制字符串以“0x”为前缀,则基数0有效。 - Edoardo Vignati

0

我有一个简短的片段,希望能帮到你 :-)

input = 'ABC123EFFF'
for index, value in enumerate(input):
    print(value)
    print(bin(int(value,16)+16)[3:])

string = ''.join([bin(int(x,16)+16)[3:] for y,x in enumerate(input)])
print(string)

首先,我使用您提供的输入并枚举每个符号。然后将其转换为二进制并从第三个位置修剪到末尾。获得 0 的诀窍是添加输入的最大值 -> 在这种情况下始终为 16 :-)

短形式是 join 方法。享受吧。


0
HEX_TO_BINARY_CONVERSION_TABLE = {
                              '0': '0000',

                              '1': '0001',

                              '2': '0010',

                              '3': '0011',

                              '4': '0100',

                              '5': '0101',

                              '6': '0110',

                              '7': '0111',

                              '8': '1000',

                              '9': '1001',

                              'a': '1010',

                              'b': '1011',

                              'c': '1100',

                              'd': '1101',

                              'e': '1110',

                              'f': '1111'}

def hex_to_binary(hex_string):
    binary_string = ""
    for character in hex_string:
        binary_string += HEX_TO_BINARY_CONVERSION_TABLE[character]
    return binary_string

当我调用 hex_to_binary("123ade") 函数时

  %timeit hex_to_binary("123ade")

这是结果:

 316 ns ± 2.52 ns per loop

或者,你可以使用 "join" 方法:

def hex_to_binary_join(hex_string):
    hex_array=[]
    for character in hex_string:
        hex_array.append(HEX_TO_BINARY_CONVERSION_TABLE[character])
    return "".join(hex_array)

我也计时了:

    %timeit hex_to_binary_join("123ade")
       397 ns ± 4.64 ns per loop 

1
不要使用字符串拼接。return "".join(HEX_TO_BINARY_CONVERSION_TABLE[c] for c in hex_string) - OneCricketeer

-1
a = raw_input('hex number\n')
length = len(a)
ab = bin(int(a, 16))[2:]
while len(ab)<(length * 4):
    ab = '0' + ab
print ab

7
说明/解释在哪里? - Sufian

-1
import binascii
hexa_input = input('Enter hex String to convert to Binary: ')
pad_bits=len(hexa_input)*4
Integer_output=int(hexa_input,16)
Binary_output= bin(Integer_output)[2:]. zfill(pad_bits)
print(Binary_output)
"""zfill(x) i.e. x no of 0 s to be padded left - Integers will overwrite 0 s
starting from right side but remaining 0 s will display till quantity x
[y:] where y is no of output chars which need to destroy starting from left"""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接