I have a function here that converts decimal to hex but it prints it in reverse order. How would I fix it?

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

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

Example:

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

~Rich

By using -1 in the result of split(), this would work even if split returned a list of 1 element.

This isn’t exactly what you asked for but you can use the “hex” function in python:

``````>>> hex(15)
'0xf'
``````

If you want to code this yourself instead of using the built-in function `hex()`, you can simply do the recursive call before you print the current digit:

``````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"),
``````

I think this solution is elegant:

``````def toHex(dec):
digits = "0123456789ABCDEF"
x = (dec % 16)
rest = dec // 16
if (rest == 0):
return 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]
``````

This output:

``````['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD']
['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad']
``````

I use

``````"0x%X" % n
``````

where `n` is the decimal number to convert.

If without `'0x'` prefix:

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

else use built-in `hex()` funtion.

Python’s string format method can take a format spec.

From decimal to binary

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

From decimal to octal

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

From decimal to hexadecimal

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

Format spec docs for Python 2

Format spec docs for Python 3

If you need even numbers of chars to be returned, you can use:

``````def int_to_hex(nr):
h = format(int(nr), 'x')
return '0' + h if len(h) % 2 else h
``````

Example

`int_to_hex(10) # returns: '0a'`

and

`int_to_hex(1000) # returns: '03e8'`

you can use this method which uses slicing

``````output = hex(15)[2:]
``````

which cuts out the first 2 characters (0x) from the output

It is good to write your own functions for conversions between numeral systems to learn something. For “real” code I would recommend to use build in conversion function from Python like bin(x), hex(x), int(x).

``````def main():
result = int(input("Enter a whole, positive, number to be converted to hexadecimal: "))
while result != 0:
remainder = changeDigit(result % 16)
result = int(result / 16)

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

This is the densest I could make for converting decimal to hexadecimal.
NOTE: This is in Python version 3.5.1

Apart from using the hex() inbuilt function, this works well:

``````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]))
``````

However this only works for converting decimal numbers up to 255 (to give a two diget hex number).

``````def tohex(dec):
x = (dec%16)
igits = "0123456789ABCDEF"
digits = list(igits)
rest = int(dec/16)
if (rest == 0):
return digits[x]

numbers = [0,16,32,48,46,2,55,887]
hex_ = ["0x"+tohex(i) for i in numbers]
print(hex_)
``````

I recently made this python program to convert Decimal to Hexadecimal, please check this out. This is my first Answer in stack overflow .

``````decimal = int(input("Enter the Decimal no that you want to convert to Hexadecimal : "))
intact = decimal
dictionary = {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'}

while(decimal!=0):
c = decimal%16
decimal = int(decimal/16)

``````

When you Execute this code this will give output as:

Enter the Decimal no that you want to convert to Hexadecimal : 2766

2766 is ACE in Hexadecimal

Instead of printing everything in the function, you could just allow it to return the value in hex, and do whatever you want with it.

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

There are probably more elegant ways of parsing the alphabetic components of the hex, instead of just using conditionals.

A version using iteration:

``````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])
``````

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

``````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"),
``````

This is the best way I use it

``````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
``````

Example:

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

if you need it Upper Case, Can use “upper function”
For Example:

``````decimal = 53350632996854
3085A9873FF6
``````

In order to put the number in the correct order i modified your code to have a variable (s) for the output. This allows you to put the characters in the correct order.

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

NOTE: This was done in python 3.7.4 so it may not work for you.

``````def decimal_to_base(decimal_number, destination_base):
digits_array = []
hexadecimals = {10:"A", 11:"B", 12:"C", 13:"D", 14:"E", 15:"F"}
while decimal_number > 0:
rest = decimal_number % destination_base
if rest in hexadecimals:
digits_array.insert(0, rest)
decimal_number = decimal_number // destination_base
return digits_array
``````

non recursive approach to convert decimal to hex

``````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
``````

``````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"))
``````

Works well.

This code is Incomplite/-\ Max input is 159

``````def DicToHex(lsdthx, number, resault):
bol = True
premier = 0
for i in range(number):
for hx in lsdthx:
if hx <= number:
if number < 16:
if hx > 9:
resault += lsdthx[hx]
else:
resault += str(lsdthx[hx])
number -= hx
else:
while bol:
if number - 16 >= 0:
number -= 16
premier += 1
else:
resault += str(premier)
bol = False
return resault

dthex = {15:'F', 14:'E', 13:'D', 12:'C', 11:'B', 10:'A', 9:9, 8:8, 7:7,6:6, 5:5, 4:4, 3:3, 2:2, 1:1}
reslt=""
num = int(input('enter dicimal number : '))
print(DicToHex(dthex, num, reslt))
``````