Подтвердить что ты не робот

Python преобразует десятичный код в шестнадцатеричный

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

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 )
4b9b3361

Ответ 1

Если вы хотите закодировать это самостоятельно, вместо использования встроенной функции 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"),

Ответ 2

Как насчет этого:

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

Пример:

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

~ Рич

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

Ответ 3

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

>>> hex(15)
'0xf'

Ответ 4

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

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']

Ответ 5

Я использую

"0x%X" % n

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

Ответ 6

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

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

else использовать встроенный hex() funtion.

Ответ 7

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

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

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

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

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

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

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

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

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

Ответ 8

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

def gethex(decimal):
    return hex(decimal)[2:]

Ответ 9

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()

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

Ответ 10

Помимо использования встроенной функции 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 (чтобы получить шестнадцатеричное шестнадцатеричное число).

Ответ 11

Вместо того, чтобы печатать все в функции, вы можете просто позволить ей вернуть значение в шестнадцатеричном формате и делать с ним все, что хотите.

def ChangeHex(n):
    x = (n % 16)
    c = ""
    if (x < 10):
        c = x
    if (x == 10):
        c = "A"
    if (x == 11):
        c = "B"
    if (x == 12):
        c = "C"
    if (x == 13):
        c = "D"
    if (x == 14):
        c = "E"
    if (x == 15):
        c = "F"

    if (n - x != 0):
        return ChangeHex(n / 16) + str(c)
    else:
        return str(c)

print(ChangeHex(52))

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

Ответ 12

Версия с итерацией:

def toHex(decimal):
    hex_str = ''
    digits = "0123456789ABCDEF"
    if decimal == 0:
       return '0'

    while decimal != 0:
        hex_str += digits[decimal % 16]
        decimal = decimal // 16

    return hex_str[::-1] # reverse the string

numbers = [0, 16, 20, 45, 255, 456, 789, 1024]
print([toHex(x) for x in numbers])
print([hex(x) for x in numbers])

Ответ 13

hex_map = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'}

def to_hex(n):
    result = ""
    if n == 0:
        return '0'
    while n != 0:
        result += str(hex_map[(n % 16)])
        n = n // 16
    return '0x'+result[::-1]

Ответ 14

n = eval(input("Enter the number:"))
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"),

Ответ 15

Это лучший способ использовать его

hex(53350632996854).lstrip("0x").rstrip("L")
# lstrip helps remove "0x" from the left  
# rstrip helps remove "L" from the right 
# L represents a long number

Пример:

>>> decimal = 53350632996854
>>> hexadecimal = hex(decimal).lstrip("0x")
>>> print(hexadecimal)
3085a9873ff6

если вам нужен верхний регистр, можете использовать "верхнюю функцию", например:

decimal = 53350632996854
hexadecimal = hex(decimal).lstrip("0x").upper()
print(hexadecimal)
3085A9873FF6

Ответ 16

Чтобы поставить число в правильном порядке, я изменил ваш код, чтобы иметь переменную (и) для вывода. Это позволяет вам расположить символы в правильном порядке.

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

ПРИМЕЧАНИЕ: Это было сделано в Python 3.7.4, поэтому он может не работать для вас.

Ответ 17

нерекурсивный подход для преобразования десятичного в шестнадцатеричный

def to_hex(dec):

    hex_str = ''
    hex_digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F')
    rem = dec % 16

    while dec >= rem:
        remainder = dec % 16
        quotient = dec / 16
        if quotient == 0:
            hex_str += hex_digits[remainder]
        else:
            hex_str += str(remainder)
        dec = quotient

    return hex_str[::-1] # reverse the string

Ответ 18

Это работает довольно хорошо:

def toHex(n):
    result, remainder = n, []
    while result > 0:
        rem = result%16
        result = result // 16
        if rem < 10:
            remainder.append(str(rem))
        else:
            if rem == 10:
                remainder.append('A')
            if rem == 11:
                remainder.append('B')
            if rem == 12:
                remainder.append('C')
            if rem == 13:
                remainder.append('D')
            if rem == 14:
                remainder.append('E')
            if rem == 15:
                remainder.append('F')
    return ''.join(remainder[::-1])

Ответ 19

dec = int(input("Enter a number below 256: "))
hex1 = dec // 16

if hex1 >= 10:
    hex1 = hex(dec)

hex2 = dec % 16
if hex2 >= 10:
    hex2 = hex(hex2)

print(hex1.strip("0x"))

Работает хорошо.