说我有
1009732533765201
而且我想要:
0x1009732533765201这是
1155581383011619329
您可以使用像这样的字符串在编程语言中执行此操作
int('1009732533765201',16)
但是我想要纯粹的数学方法。将1009732533765201转换为1155581383011619329的base16
[我试过:int('1009732533765201',16),但这使用了字符串,并且对于大数而言很慢,我只在寻找数学角度。
[这是一种数学方法,我知道该怎么做:0x1009732533765201 = 1155581383011619329
以下是执行此操作的python方法:int('1009732533765201',16)
但是我只能手动执行第一个数学版本。如何做到这一点,在不使用字符串的情况下将0x1009732533765201转换为将“ 0x”连接到“ 1009732533765201”并且不使用eval的方法
有没有办法采用1009732533765201,并将其转换为与0x1009732533765201相同的输出,以在不使用int('1009732533765201',16)的情况下获取其整数,我的目标是找到更快的方法
[由PARTHIAN SHOT回答,这是他所采取的方法的结果,而这正是我一直在寻找的方法,而无需int()即可做到这一点
orig = 1009732533765201
num = orig
result = 0
i = 0
while num != 0:
result += (num % 10) * (16 ** i)
num //= 10
i += 1
print(orig, num, result, "%x" % (result))
1009732533765201 0 1155581383011619329 1009732533765201
这里的想法是,我们一次从右到左查看原始十进制数字的每个数字,然后将其乘以16 ** i
而不是10 ** i
,然后将其添加到新数字中。
结果等同于将数字的原始十进制表示形式解释为十六进制。
#!/usr/bin/env python
orig = 34029235
num = orig
result = 0
i = 0
while num != 0:
result += (num % 10) * (16 ** i)
num //= 10
i += 1
print(orig, num, result, "%x" % (result))
运行该代码可以使我们...
bash$ ./main.py
(34029235, 0, 872583733, '34029235')
bash$
正如我在评论中说的那样,Python开箱即用地知道如何处理基数为16的数字。只需将16的底值分配给变量即可。
这里是一个例子:
Python 3.7.4 (default, Aug 12 2019, 14:45:07)
[GCC 9.1.1 20190605 (Red Hat 9.1.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> i=0x16
>>> i
22
>>> i=0xAA
>>> i
170
>>>
正如我所说,这适用于其他基础,例如基础2:
>>> i=0b1010
>>> i
10
>>>
和基数8:
>>> i=0o12
>>> i
10
>>>