Python конвертировать десятичные в шестнадцатеричные - PullRequest
40 голосов
/ 27 апреля 2011

У меня есть функция, которая преобразует десятичное число в шестнадцатеричное, но печатает его в обратном порядке.Как бы это исправить?

def ChangeHex(n):
    if (n < 0):
        print(0)
    elif (n<=1):
        print(n)
    else:
        x =(n%16)
        if (x < 10):
            print(x), 
        if (x == 10):
            print("A"),
        if (x == 11):
            print("B"),
        if (x == 12):
            print("C"),
        if (x == 13):
            print("D"),
        if (x == 14):
            print("E"),
        if (x == 15):
            print ("F"),
        ChangeHex( n / 16 )

Ответы [ 17 ]

86 голосов
/ 28 ноября 2012

Что по этому поводу:

hex(dec).split('x')[-1]

Пример:

>>> d = 30
>>> hex(d).split('x')[-1]
'1e'

~ Rich

Используя -1 в результате split (), это будет работать, даже если split вернул список из 1 элемента.

33 голосов
/ 27 апреля 2011

Это не совсем то, что вы просили, но вы можете использовать функцию "hex" в python:

>>> hex(15)
'0xf'
22 голосов
/ 27 апреля 2011

Если вы хотите написать это самостоятельно вместо использования встроенной функции hex(), вы можете просто сделать рекурсивный вызов, прежде чем печатать текущую цифру:

def ChangeHex(n):
    if (n < 0):
        print(0)
    elif (n<=1):
        print n,
    else:
        ChangeHex( n / 16 )
        x =(n%16)
        if (x < 10):
            print(x), 
        if (x == 10):
            print("A"),
        if (x == 11):
            print("B"),
        if (x == 12):
            print("C"),
        if (x == 13):
            print("D"),
        if (x == 14):
            print("E"),
        if (x == 15):
            print ("F"),
20 голосов
/ 27 апреля 2011

Я думаю, что это решение элегантно:

def toHex(dec):
    x = (dec % 16)
    digits = "0123456789ABCDEF"
    rest = dec / 16
    if (rest == 0):
        return digits[x]
    return toHex(rest) + digits[x]

numbers = [0, 11, 16, 32, 33, 41, 45, 678, 574893]
print [toHex(x) for x in numbers]
print [hex(x) for x in numbers]

Этот вывод:

['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD']
['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad']
16 голосов
/ 27 декабря 2013

Я использую

"0x%X" % n

, где n - десятичное число для преобразования.

13 голосов
/ 26 ноября 2014

Если без префикса '0x':

'{0:x}'.format(int(dec))

иначе используйте встроенную функцию hex().

9 голосов
/ 19 октября 2016

Метод строкового формата Python может принимать спецификацию формата.

От десятичный до двоичный

"{0:b}".format(154)
'10011010'

От десятичный до восьмеричное

"{0:o}".format(154)
'232'

От десятичное число до шестнадцатеричное

"{0:x}".format(154)
'9a'

Формат спецификации документовдля Python 2

Формат спецификации документов для Python 3

1 голос
/ 04 сентября 2016

Чтобы получить чистое шестнадцатеричное значение, это может быть полезно.Это основано на ответе Джо:

def gethex(decimal):
    return hex(decimal)[2:]
1 голос
/ 29 июля 2017
def main():
    result = int(input("Enter a whole, positive, number to be converted to hexadecimal: "))
    hexadecimal = ""
    while result != 0:
        remainder = changeDigit(result % 16)
        hexadecimal = str(remainder) + hexadecimal
        result = int(result / 16)
    print(hexadecimal)

def changeDigit(digit):
    decimal =     [10 , 11 , 12 , 13 , 14 , 15 ]
    hexadecimal = ["A", "B", "C", "D", "E", "F"]
    for counter in range(7):
        if digit == decimal[counter - 1]:
            digit = hexadecimal[counter - 1]
    return digit

main()

Это самое плотное, что я могу сделать для преобразования десятичного числа в шестнадцатеричное.ПРИМЕЧАНИЕ: это в Python версии 3.5.1

1 голос
/ 20 августа 2018

Помимо использования встроенной функции hex (), это хорошо работает:

letters = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F']
decimal_number = int(input("Enter a number to convert to hex: "))
print(str(letters[decimal_number//16])+str(letters[decimal_number%16]))

Однако это работает только для преобразования десятичных чисел до 255 (для получения шестнадцатеричного числа из двух десятков).

...