Python将十进制转换为十六进制
Posted
技术标签:
【中文标题】Python将十进制转换为十六进制【英文标题】:Python convert decimal to hex 【发布时间】:2011-08-13 08:47:02 【问题描述】:我在这里有一个函数可以将十进制转换为十六进制,但它以相反的顺序打印。我该如何解决?
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 )
【问题讨论】:
另见:Python: hex conversion always two digits 答案与重新发明***有关。有关将整数转换为十六进制表示的答案,请参阅builtin "hex" 【参考方案1】:这个呢:
hex(dec).split('x')[-1]
例子:
>>> d = 30
>>> hex(d).split('x')[-1]
'1e'
~丰富
通过在 split() 的结果中使用 -1,即使 split 返回一个包含 1 个元素的列表,这也可以工作。
【讨论】:
***.com/a/35750576/8437974 Martijn Pieter'sformat(15, 'x')
【参考方案2】:
这并不完全符合您的要求,但您可以在 python 中使用“hex”函数:
>>> hex(15)
'0xf'
【讨论】:
打印十六进制(15); TypeError: 'str' 对象不可调用 @Babbit 那你做错了什么。您可能将变量命名为 hex 或其他名称。【参考方案3】:如果您想自己编写代码而不是使用内置函数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"),
【讨论】:
@Apostolos 不,我不这么认为。是什么让你这么想的?但是,我认为对于问题的原始发布者来说,学习如何修复他们的代码很有用,即使这不是我建议在“真实”代码中使用的解决方案。 ChangeHex( n / 16 ) 或 ChangeHex( n // 16 ) ? @sortasn // 16
在 Python 3 中。这个答案是为 Python 2 编写的,在那个版本中,两者是等价的。 (我试图对问题中的代码进行最小的更改以使其正常工作。)【参考方案4】:
我认为这个解决方案很优雅:
def toHex(dec):
digits = "0123456789ABCDEF"
x = (dec % 16)
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))
否则使用内置的hex()
函数。
【讨论】:
另见:Python: hex conversion always two digits【参考方案7】: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
【讨论】:
【参考方案8】:如果您需要返回偶数个字符,您可以使用:
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'
【讨论】:
完美的解决方案,加上例子。谢谢先生。【参考方案9】:你可以使用这种使用切片的方法
output = hex(15)[2:]
从输出中删除前 2 个字符 (0x)
【讨论】:
【参考方案10】:最好编写自己的函数来进行数字系统之间的转换以学习一些东西。对于“真实”代码,我建议使用 Python 的内置转换函数,例如 bin(x)、hex(x)、int(x)。
【讨论】:
【参考方案11】: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
【讨论】:
【参考方案12】:除了使用 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(给出两位十六进制数)。
【讨论】:
【参考方案13】: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_)
【讨论】:
【参考方案14】:我最近做了这个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
【讨论】:
【参考方案15】:您可以只允许它以十六进制返回值,然后用它做任何您想做的事情,而不是打印函数中的所有内容。
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))
解析十六进制的字母组件可能有更优雅的方法,而不仅仅是使用条件。
【讨论】:
【参考方案16】:使用迭代的版本:
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])
【讨论】:
【参考方案17】: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]
【讨论】:
【参考方案18】: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"),
【讨论】:
【参考方案19】:这是我使用它的最佳方式
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
【讨论】:
【参考方案20】:为了使数字按正确的顺序排列,我修改了您的代码,以便为输出提供一个变量。这使您可以按正确的顺序放置字符。
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 中完成的,因此它可能不适合您。
【讨论】:
【参考方案21】:将十进制转换为十六进制的非递归方法
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
【讨论】:
【参考方案22】: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"))
效果很好。
【讨论】:
【参考方案23】:此代码不完整/-\最大输入为 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))
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Python将十进制转换为十六进制的主要内容,如果未能解决你的问题,请参考以下文章