使用Python脚本将十六进制和八进制数字转换为十进制形式
在命令行中,有很多内置的函数,比如 int(octal),可以用来把八进制数字转换成十进制数字。但是在脚本中,这些函数却不管用。比如,int(0671) 在脚本中会返回 0671,而在 Python 命令行中,它代表的是八进制数字的十进制形式。有人能帮忙解决这个问题吗?
谢谢!
2 个回答
2
首先,int()这个函数其实没什么用。你可以直接输入0671。
然后,计算机内部是用二进制来存储数字的,你只是把它的字符串形式转换了一下。数字本身并没有改变。因此,下面这两种写法都会得到True,这可能让人感到困惑:
0671 == 0671
0671 == 441
为了确保程序输出你想要的进制数字,最简单的方法是使用字符串格式化,比如这样做(如果你想要十进制的话):
print "%d" % 0671 # will output the number in base 10
12
这里有点混淆——严格来说(在计算机领域,越严格越好;-),并没有“八进制数字”,而是有一些被称为字符串的东西,它们是数字的八进制表示(还有其他更常见的字符串,比如十进制表示和十六进制表示)。底层的数字(整数)和这些表示方式是完全不同的类型(默认情况下显示的是它们的十进制表示)——例如:
>>> 2 + 2
4
>>> '2' + '2'
'22'
引号表示的是字符串(也就是表示方式)——注意,它们本身和它们可能表示的数字没有任何关系。
所以,你的问题可以理解为你想把一个八进制表示转换成十进制表示(等等)——这可以这样做:
>>> str(int('0671', 8))
'441'
注意引号(表示字符串,也就是表示方式)。int(s, 8)
将字符串 s
转换为一个整数,作为八进制表示(如果转换失败,会抛出一个异常)。str(n)
生成数字 n
的字符串形式(正如我提到的,默认是十进制表示)。