Как преобразовать число в базу 16 с математикой (не используя строки)? - PullRequest
0 голосов
/ 05 октября 2019

Скажите, у меня есть

1009732533765201

, и я хочу:

0x1009732533765201, что составляет

1155581383011619329

Вы можете сделать это вязыки программирования с такими строками, как это

int ('1009732533765201', 16)

, но я хочу чисто математический способ. Чтобы преобразовать 1009732533765201 в его base16 из 1155581383011619329

Я попытался: int ('1009732533765201', 16), но здесь используется строка, и для больших чисел она медленная, я ищу только математический угол.

Вот математический способ, которым я знаю, как это сделать: 0x1009732533765201 = 1155581383011619329

Вот способ Python сделать это: int ('1009732533765201', 16)

но яПервую математическую версию можно сделать только вручную. Как это можно сделать, преобразовав 0x1009732533765201 без использования строки для конкатенации '0x' в '1009732533765201' и не используя eval

. Есть ли способ взять 1009732533765201 и преобразовать его в тот же вывод, что и 0x1009732533765201, чтобы получитьего целое число без использования int ('1009732533765201', 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 1155581383011619329 1009732533765201

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Идея в том, что мы смотрим на каждую цифру исходного десятичного числа по одному, справа налево, умножаем ее на 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$
0 голосов
/ 05 октября 2019

Как я уже сказал в своем комментарии, 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
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...