Конвертер двоичных файлов в шестнадцатеричные

#python #binary #hex

#python #двоичный #шестнадцатеричный

Вопрос:

Я написал код, чтобы попытаться преобразовать 4-разрядное двоичное число в шестнадцатеричное. Единственное, когда я ввожу значение, начинающееся с ‘1’, оно приводит к преобразованию, тогда как если я ввожу значение, начинающееся с ‘0’, оно не работает. Любая помощь?

 print ("""Here's how the program will work. You need to get your binary number ready.
        if it is 8 bit, split it into four, because thats how hexadecimal works. Make sure all your conversions
        are slip into '4' bits like this:
        01001101 will turn into:
        0100 ,and then 1101""")
time.sleep(6)
print ("""So, for example, the program will ask you for your binary number. Like this:
        Enter your binary number here:
        Then you put in your number, like this:
        Enter your binary number here: 0100
        Lastly, the program will give you your hexadecimal number, then ask you if you would
        like to do another conversion in this area, or end program.""")
time.sleep(6)
HEXADECIMAL = int(input("Please enter your binary number here:   "))                         
if HEXADECIMAL == 0000:
    print ("Your hexadecimal value is 0")
if HEXADECIMAL == 0001:
    print ("Your hexadecimal value is 1")
if HEXADECIMAL == 0010:
    print ("Your hexadecimal value is 2")
if HEXADECIMAL == 0011:
    print ("Your hexadecimal value is 3")
if HEXADECIMAL == 0100:
    print ("Your hexadecimal value is 4")
if HEXADECIMAL == 0101:
    print ("Your hexadecimal value is 5")
if HEXADECIMAL == 0110:
    print ("Your hexadecimal value is 6")
if HEXADECIMAL == 0111:
    print ("Your hexadecimal value is 7")
if HEXADECIMAL == 1000:
    print ("Your hexadecimal value is 8")
if HEXADECIMAL == 1001:
    print ("Your hexadecimal value is 9")
if HEXADECIMAL == 1010:
    print ("Your hexadecimal value is A")
if HEXADECIMAL == 1011:
    print ("Your hexadecimal value is B")
if HEXADECIMAL == 1100:
    print ("Your hexadecimal value is C")
if HEXADECIMAL == 1101:
    print ("Your hexadecimal value is D")
if HEXADECIMAL == 1110:
    print ("Your hexadecimal value is E")
if HEXADECIMAL == 1111:
    print ("Your hexadecimal value is F")
  

Вы можете попробовать запустить этот код и начать, например, с 0110, но он не преобразуется. Любая помощь?

Комментарии:

1. Вы преобразуете пользовательский ввод в int . int не начинайте с начального нуля. Просто сохраните пользовательский ввод в виде строки и выполняйте тесты, сравнивая со строками.

2. Прежде всего, это BINARY не HEXADECIMAL так .

3. int Приведение работает некорректно. Сохраняйте это как строку!

4. Не ответ. но, надеюсь, вы знаете hex() , что функция существует в python?

5. Когда я сохраняю его в виде строки, программа сообщает, что это «недопустимый токен», и skovordikin, это ДВОИЧНЫЙ преобразователь в ШЕСТНАДЦАТЕРИЧНЫЙ

Ответ №1:

Вам не нужно использовать if/else инструкции каждый раз. Есть классный способ, который вы можете использовать int() в python, если вы используете строку, int() функция может напрямую преобразовать ее в любую базу для вас.

 HEXADECIMAL = str(input())

base = 16 # for Hex and 2 for binary
msg = "Your hexadecimal value is"
print (msg, int(HEXADECIMAL, base))
  

Это сделает это за вас. Но если вы хотите придерживаться своего метода, вам, вероятно, следует добавить 0b as 0b0010 перед двоичным файлом и делать что-то еще, начальные нули незаконны, 0010 незаконны.

Комментарии:

1. итак, где я могу поместить это в свою программу?

2. замените все после второго time.sleep(6) приведенным выше кодом.

Ответ №2:

Когда вы вводите целое число, начинающееся с начального 0, python интерпретирует его как находящееся в базе 8:

 a = 0110
print a
  

будет выводить

 72
  

Поэтому удалите начальный 0 во входных данных или удалите их перед приведением int() к нему

Ответ №3:

заменить,

 HEXADECIMAL = int(input("Please enter your binary number here:   ")) 
  

с,

 temp = input("Please enter your binary number here:   ")                       
HEXADECIMAL = int (temp)
  

плюс удалите время ожидания, если есть ошибка.

Комментарии:

1. Два опубликованных вами блока кода функционально эквивалентны и ни один из них не решает исходный вопрос.

2. Это ничего не меняет, это не имеет никакого смысла.