Python将十进制转换为十六进制

时间:2011-04-26 20:45:16

标签: python function decimal hex

我在这里有一个将十进制转换为十六进制的函数,但它以相反的顺序打印。我该如何解决?

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 )

22 个答案:

答案 0 :(得分:85)

这个怎么样:

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

示例:

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

〜富

通过在split()的结果中使用-1,即使split返回了1个元素的列表,这也可以工作。

答案 1 :(得分:33)

这不是您要求的,但您可以在python中使用“hex”函数:

>>> hex(15)
'0xf'

答案 2 :(得分:21)

如果你想自己编码而不是使用内置函数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"),

答案 3 :(得分:20)

我认为这个解决方案很优雅:

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

答案 4 :(得分:16)

我用

"0x%X" % n

其中n是要转换的十进制数。

答案 5 :(得分:13)

如果没有'0x'前缀:

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

否则使用内置hex()功能。

答案 6 :(得分:8)

Python的字符串格式方法可以采用格式规范。

十进制二进制

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

十进制八进制

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

十进制十六进制

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

Format spec docs for Python 2

Format spec docs for Python 3

答案 7 :(得分:2)

最好编写您自己的函数,以便在数字系统之间进行转换以学习一些知识。对于“真实”代码,我建议使用Python中的内置转换功能,例如bin(x)hex(x)int(x)。可以找到一些示例here

答案 8 :(得分:1)

我最近制作了这个python程序来将十进制转换为十六进制,请检查一下。 这是我在堆栈溢出中的第一个答案。

decimal = int(input("Enter the Decimal no that you want to convert to Hexadecimal : "))
intact = decimal
hexadecimal = ''
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 
    hexadecimal =  dictionary[c] + hexadecimal 
    decimal = int(decimal/16)

print(f"{intact} is {hexadecimal} in Hexadecimal")

当您执行此代码时,输​​出如下:

输入要转换为十六进制的十进制数:2766

2766 是十六进制的 ACE

答案 9 :(得分:1)

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

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

答案 10 :(得分:1)

如果您需要返回偶数个字符,则可以使用:

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

示例

int_to_hex(10) # returns: '0a'

int_to_hex(1000) # returns: '03e8'

答案 11 :(得分:1)

除了使用内置的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的十进制数字(给出两个diget十六进制数字)。

答案 12 :(得分:1)

appengine.{your_app_name}

这是我将十进制转换为十六进制最密集的方法。 注意:这是在Python 3.5.1版本中

答案 13 :(得分:1)

要获得纯十六进制值,这可能很有用。这是基于乔的回答:

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

答案 14 :(得分:0)

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]

答案 15 :(得分:0)

使用迭代的版本:

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

这是我使用它的最佳方式

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

答案 18 :(得分:0)

为了按正确的顺序排列数字,我修改了您的代码以使输出具有变量。这使您可以按正确的顺序放置字符。

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中完成的,因此它可能对您不起作用。

答案 19 :(得分:0)

不是在函数中打印所有内容,而是允许它以十六进制形式返回值,并随意执行任何操作。

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

可能有更优雅的方法来解析十六进制的字母组件,而不是仅仅使用条件。

答案 20 :(得分:-1)

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

运作良好。

答案 21 :(得分:-1)

将十进制转换为十六进制的非递归方法

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