有人可以向我解释一下这是如何运作的吗?我一直在看,但我不明白。它似乎工作得很好,但对我的生活这没有任何意义。有人请帮忙。
# Convert a decimal to a hex as a string
def decimalToHex(decimalValue):
hex = ""
while decimalValue != 0:
hexValue = decimalValue % 16
hex = toHexChar(hexValue) + hex
decimalValue = decimalValue // 16
return hex
# Convert an integer to a single hex digit in a character
def toHexChar(hexValue):
if 0 <= hexValue <= 9:
return chr(hexValue + ord('0'))
else: # 10 <= hexValue <= 15
return chr(hexValue - 10 + ord('A'))
def main():
# Prompt the user to enter a decimal integer
decimalValue = eval(input("Enter a decimal number: "))
print("The hex number for decimal",
decimalValue, "is", decimalToHex(decimalValue))
main() # Call the main function
答案 0 :(得分:1)
好吧,我会尝试解释一下。首先,让我们看一下将数字从0-15转换为0123的函数... ABCDEF:
def toHexChar(hexValue):
if 0 <= hexValue <= 9:
return chr(hexValue + ord('0'))
else: # 10 <= hexValue <= 15
return chr(hexValue - 10 + ord('A'))
你可以看到,它处理两种情况:一种情况,其中数字0-9需要转换为来自&#39; 0&#39; 0的文本字符。到了&#39; 9&#39;,另一个需要将数字10-16转换成来自&#39; A&#39;到&#39; F&#39;它将根据ASCII码返回字符。例如,ord('A')
返回65 .. chr()
会将整数从65转换回ascii char&#39; A&#39;。
这就是打印功能。现在循环:
while decimalValue != 0:
此循环将一直运行,直到不能获取16er块
hexValue = decimalValue % 16
正常模数。它从小数中提取一个块(hexValue将为0-15)
hex = toHexChar(hexValue) + hex
构建一个字符串。由于HEX被标准化为在左侧具有较大部分的数字,因此它在转换后的字符前面。
decimalValue = decimalValue // 16
准备下一个循环:使用floordiv(a, b)
(写为// b )删除此16er块。
让我们了解它的工作原理。让我们假设我们想要将数字255转换为HexString。它将通过调用modulo 255 % 16 = 15
开始。然后它将被转换为toHexChar(15) = 'F'
。
下一步是删除16er块。如果我们使用正常除法,我们将获得255 / 16 = 15.9375
。但是,这会被四舍五入,因为它在小数点之后的.5之上导致错误的行为(结果将是0x1FF )..这就是为什么我们必须使用一个floordivsion这是floor(255/16) = 15
或不久:255 // 16 = 15
。
我希望这能更好地解释它,特别是为什么需要//。
答案 1 :(得分:1)
我将使用示例十进制数11开始解释。
11十进制是0xB
11模16是11.同意?这意味着hexValue变为整数11.
所以整数11传递给toHexChar。
所以我们有:
toHexChar(11)
11大于9,因此调用else路径。
11 - 10当然是1。
ascii值'A'是65或0x41,所以ord('A')得到65
1 + 65 = 66。
chr()函数将整数值转换为ASCII字符。 ascii 66是'B'。所以toHexChar返回'B'
因此,hex ='B'
现在,decimalValue // 16,记住这是整数除法,结果为零,因此我们突破了while循环,因此decimalToHex(11)返回'B'。
示例编号17。
17 modulo 16 = 1 - 我们有一个字符串'1'
17/16 = 1也。所以我们再循环一次。
在下一次迭代中,1%16产生1,toHexChar返回'1'作为结果。
hex = toHexChar(hexValue)+ hex
将意味着:
hex = toHexChar(1)+'1'
hex ='1'+'1'
结果为“11”
通过一些示例数字来思考。代替你去。
得到余数的基础是模16。其余部分不能立即使用,因为如果数字在10到16之间,则需要使用A-F字符,因此使用toHexChar函数。
然后你除以16然后继续剩下的剩余部分。