Преобразуйте шестнадцатеричное число в двоичный файл

Существует также более простая причина для этого, чем просто ошибки или дисковое повреждение и т.д. Я думаю это, наиболее вероятная причина для этого для случая состоит в том, когда кто-то пишет рекурсивную текстовую замену на рабочей копии без исключения .svn файлы.
Это означает нетронутые копии файлов (в основном Базовая версия файлов, это сохранило в .svn административной области), изменяются, и это делает недействительным сумму MD5.

Преграды @Andrew: это также объясняет, почему Ваше решение фиксирует это.

96
задан Aaron Hall 14 May 2016 в 02:36
поделиться

6 ответов

Другой способ:

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')
1
ответ дан 24 November 2019 в 05:32
поделиться

Замените каждую шестнадцатеричную цифру соответствующими 4 двоичными цифрами:

1 - 0001
2 - 0010
...
a - 1010
b - 1011
...
f - 1111
3
ответ дан 24 November 2019 в 05:32
поделиться

Вот довольно простой способ сделать это использование перестановки битов для генерации двоичных строк.

Ключевой бит, который необходимо понять:

(n & (1 << i)) and 1

Который будет генерировать либо 0, либо 1, если установлен i-й бит числа n.


import binascii

def byte_to_binary(n):
    return ''.join(str((n & (1 << i)) and 1) for i in reversed(range(8)))

def hex_to_binary(h):
    return ''.join(byte_to_binary(ord(b)) for b in binascii.unhexlify(h))

print hex_to_binary('abc123efff')

>>> 1010101111000001001000111110111111111111

Изменить: используя "новый" "тернарный оператор this:

(n & (1 << i)) and 1

Превратится в:

1 if n & (1 << i) or 0

(Какой TBH я не уверен, насколько он читабелен)

10
ответ дан 24 November 2019 в 05:32
поделиться
import binascii

binary_string = binascii.unhexlify(hex_string)

Чтение

binascii.unhexlify

Возвращает двоичные данные, представленные шестнадцатеричной строкой, указанной в качестве параметра.

57
ответ дан 24 November 2019 в 05:32
поделиться
bin(int("abc123efff", 16))[2:]
44
ответ дан 24 November 2019 в 05:32
поделиться

шестнадцатеричный -> десятичный, затем десятичный -> двоичный

#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
ответ дан 24 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: