为什么要进行int(“ 0xff”,16)计算却不能计算int(“ hello”,16)?

时间:2019-09-13 22:26:56

标签: python-3.x string integer int

如果这是一个愚蠢的问题,请原谅我。我目前正在通过Skillsoft课程学习Python。讲师使用的示例之一是:int("0xff",16)并进行了计算,并打印了255。

我只是感到困惑,因为尽管我知道0xff是“十六进制数FF,其整数值为255”(感谢Google),但我不明白“ 0xff”如何不被视为字符串报价。当我尝试int("hello",16)时遇到:

Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    int("hello", 16)
ValueError: invalid literal for int() with base 16: 'hello'

当“ 0xff”和“ hello”都是字符串时,int("0xff",16)如何计算而不是int("hello",16)

1 个答案:

答案 0 :(得分:1)

因为"0xff"是代表十六进制数字(以16为基数)的字符串,十六进制数字的范围为09和{{1} }到af具有"hello""h""l",但都不是有效的十六进制数字。

"o"中的"0x"仅用于指定这是一个十六进制字符串,实际数字仅为"0xff""ff")。

要了解为什么允许使用字符串,请考虑基于int("ff", 16) ==> 255的数字系统中的数字(170-9),如何将a-g与数字一起使用例如int,例如"gg"

您可以将int("gg", 17)int一起使用,但只能使用大于或等于"hello"的底数(因为25),10 + ord(max("hello")) - 97 + 1 == 25