【问题标题】:converting hexadecimal , octal numbers into decimal form using python script使用 python 脚本将十六进制、八进制数转换为十进制形式
【发布时间】:2011-03-03 19:08:16
【问题描述】:

有许多 inblit 函数,如 int(octal) 可用于在命令行上将八进制数转换为十进制数,但这些在 script 中不起作用。 int(0671) 在脚本中返回 0671,因为它表示 python 命令行上八进制数的十进制形式。 救命???

谢谢

【问题讨论】:

  • 贴一些真实的代码,有真实的结果,方便大家帮忙。
  • 谢谢,实际上我想制作自己的加密算法和解密算法,加密算法可以正常工作并将字符的 ascii 值转换为十六进制和八进制交替表示。但是当我尝试解密时,出现以下问题将帮助您理解: 注意:以下字符串是 char 的 ascii 值的交替八进制和十六进制。 /////////////解密/////// l="01630x7401620x6901560x67" f=len(l) k=0 d=0 x=[] for i in range(0 ,f,4): g=l[i:i+4] print g k=k+1 if(k%2==0): p=g print p else: p=int(g) print p跨度>

标签: python hex octal


【解决方案1】:

这里有些混乱——迂腐(对于计算机,迂腐总是最好的;-),没有“八进制数”,有 字符串 是八进制的表示 数字(和其他字符串,更常见的是它们的十进制表示,十六进制表示)。底层数字(整数)是与任何表示形式完全不同的类型(默认显示它们的十进制表示形式)——例如:

>>> 2 + 2
4
>>> '2' + '2'
'22'

引号表示字符串(即表示)——请注意,它们本身与它们可能表示的数字无关。

因此,解释您的问题的一种方法是您想要将八进制表示转换为十进制表示(等等)——这将是:

>>> str(int('0671', 8))
'441'

注意引号(表示字符串,即表示)。 int(s, 8) 将字符串 s 转换为八进制表示形式的整数(如果转换无法进行,则引发异常)。 str(n) 生成数字 n 的字符串形式(正如我所提到的,默认情况下是十进制表示)。

【解决方案2】:

首先,int() 是无用的。您只需输入 0671。

然后,数字以二进制形式存储在计算机本身上,您只是转换其字符串表示形式。数字本身不会改变。因此,这两个都将解析为 True,例如,这可能是混淆的根源:

0671 == 0671
0671 == 441

为确保您将让程序以所需的基数输出数字,最简单的方法是使用字符串格式,如下所示(如果您希望它以 10 为基数):

print "%d" % 0671  # will output the number in base 10

【讨论】:

  • 请注意,仅键入 0671 在 Python 3 中不再有效;改用0o671(适用于所有高于 2.6 的版本)。
  • @MarkDickinson, 0o671 实际上在 Python 2.6 中工作。我在 RHEL5 Linux 上使用 Python 2.6.3 进行了测试。
  • @A-B-B:是的,我没有写清楚。 “所有高于 2.6 的版本”意味着包括 2.6。
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2010-12-15
  • 2011-08-13
  • 2018-04-21
  • 2015-12-12
  • 2021-07-09
相关资源
最近更新 更多