如何将正十进制int转换成十六进制字符串?

2024-04-25 17:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试创建一个函数将十进制正数转换成十六进制字符串时遇到了问题(不打印,只返回十六进制数的字符串)

如果您认为将二进制字符串转换为十六进制字符串更容易的话,那么这个函数应该可以工作到

我已经尝试了一些我在论坛上找到的代码,但是没有一个能正常工作,有些只是在0-15的时间间隔内工作,然后又开始从0开始打印。你知道吗

def hex(n):
    r = ''
    if n < 16:
        if n < 10: return r + str(n)
        if n == 10: return r + 'A'
        if n == 11: return r + 'B'
        if n == 12: return r + 'C'
        if n == 13: return r + 'D' 
        if n == 14: return r + 'E'
        if n == 15: return r + 'F'
    else:
        hex(n//16)

这就是我说的12月15日前有效的代码

代码需要接收一个十进制或二进制数(如果更简单的话),并返回一个数字转换为十六进制的字符串。你知道吗

编辑:我不能使用hex()bin(),dec()。。。你知道吗


Tags: 函数字符串代码间隔returnifdef时间
2条回答

可以使用while循环而不是递归,并使用dictn除以16的余数(不是商,商用作n的下一个值)的值映射到相应的hex数字:

def my_hex(n):
  m = {i : str(i) for i in range(10)}
  m.update({
    10: 'A',
    11: 'B',
    12: 'C',
    13: 'D',
    14: 'E',
    15: 'F',
  })
  r = ''
  while n:
    r = m[n % 16] + r
    n //= 16
  return r

else条件下只需要return hex(n//16) + hex(n%16)

def hex(n):
    r = ''
    if n < 10: return r + str(n)
    if n == 10: return r + 'A'
    if n == 11: return r + 'B'
    if n == 12: return r + 'C'
    if n == 13: return r + 'D' 
    if n == 14: return r + 'E'
    if n == 15: return r + 'F'

    else:
         return hex(n//16) + hex(n%16)

示例:

hex(5678)

输出:

'162E'

例如,当您将数字90转换为十六进制时,您需要5x16+10。 然后在循环的基础上,您需要函数返回n // 16的十进制转换,但也要返回除法的其余部分。你知道吗

考虑到str可以简单地与sum运算符连接,只需添加hex(n%16)

相关问题 更多 >