Python 如何使用数学(不使用字符串)将数字转换为基数16?

Python 如何使用数学(不使用字符串)将数字转换为基数16?,python,math,Python,Math,说我有 1009732533765201 我想: 0x1009732533765201,即 115558138301619329 您可以在具有如下字符串的编程语言中执行此操作 国际'1009732533765201',16 但是我想要纯数学的方法。将1009732533765201转换为1155581383016169329的base16 我尝试了:int'1009732533765201',16但这使用了字符串,对于大数字来说速度很慢,我只寻找一个数学角度 以下是我知道的一种数学方法: 0x1

说我有

1009732533765201

我想:

0x1009732533765201,即

115558138301619329

您可以在具有如下字符串的编程语言中执行此操作

国际'1009732533765201',16

但是我想要纯数学的方法。将1009732533765201转换为1155581383016169329的base16

我尝试了:int'1009732533765201',16但这使用了字符串,对于大数字来说速度很慢,我只寻找一个数学角度

以下是我知道的一种数学方法: 0x1009732533765201=115558138301616929

下面是一种python方法: 国际'1009732533765201',16

但我只能手动完成第一个数学版本。如何实现这一点,在不使用字符串的情况下将0x1009732533765201转换为将“0x”连接到“1009732533765201”并且不使用eval

有没有办法在不使用int'1009732533765201'的情况下获取1009732533765201,并将其转换为与0x1009732533765201相同的输出以获取其整数,16我的目标是找到一种更快的方法

帕提亚射击回答说,这是他的方法的结果,这正是我所寻找的,一种没有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 115558138301616929 1009732533765201

正如我在评论中所说,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
>>>

这里的想法是,我们从右到左一次查看原始十进制数的每个数字,并将其乘以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$

你所说的纯数学方法是什么意思?不使用字符串是什么意思?根据定义,数字的十六进制表示是一个字符串。在计算机中,整数往往用二进制2的补码表示。由于十六进制基数16是基数2的整数次幂,可以说,计算机中遇到的任何数字都已经是基数16了。当然,你的问题不同。您希望能够从数学上解释数字的十进制表示,就像它是十六进制一样。这很简单。我会写一个东西。你能告诉我们为什么int'1009732533765201',16不够吗?您自己的计算代码不太可能比Python的快。Python只知道如何处理0x表示法和其他开箱即用的基础。只需继续并分配一个变量,如i=0x16。没有必要使用字符串。这是我想要的答案!!!我想取int,比如1009,然后得到0x1009作为4105的答案,你的代码在没有字符串的情况下工作@你的问题一点也不清楚。如果您没有突出显示此答案,我就不会知道这是您想要的。@markransem我将在这里编辑我的消息,以使问题更清楚,希望这对将来的人有所帮助。这实际上很有用,所以我一定会编辑它。我认为OP很清楚他们想要什么。措辞并不完美,但意图非常明确。这就是为什么我毫不费力地找出问题并给出答案的原因。