Работа с очень большими шестнадцатеричными числами в Python - PullRequest
0 голосов
/ 25 мая 2019

Мне нужно преобразовать чрезвычайно большое число

(760402852596084587359490684321824034940816612213847025986535451828145781910762684416) в шестнадцатеричное в python, но, кажется, оно округляется, когда я запускаю hex (N).Что я должен сделать?Я пробовал float.hex, но это было бесплодно

Сказанное число дает 0x643437346d684000000000000000000000000000000000000000000000000000000000

Полученный гекс должен быть 0x643437346d696e3372535f43683334373372535f344e645f4c693452535f30685f6d79

from sys import argv
print(hex(int(argv[1])))

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Я попробовал вам исходное число, преобразовав его с помощью другой функции, а затем добавив 1 к 1.

Python не обрезается, шестнадцатеричное число вашего номера просто заканчивается 0 с:

>>> num=760402852596084587359490684321824034940816612213847025986535451828145781910762684416
>>> to_bytes(num)
'643437346d684000000000000000000000000000000000000000000000000000000000'
>>> to_bytes(num+1)
'643437346d684000000000000000000000000000000000000000000000000000000001'
>>> to_bytes(num+2)
'643437346d684000000000000000000000000000000000000000000000000000000002'

Вот моя функция to_bytes для справки:

def to_bytes(i, count=0, endian='big'):
    count = 1 if i < 256 else math.ceil(math.log(i + 1, 256))
    return i.to_bytes(count, endian).hex()
0 голосов
/ 25 мая 2019

Вы уверены, что это не так? Вы можете проверить код ниже. Результаты одинаковы:

def make_hex(a):
    list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
    output = []
    while a>1:
        output.append(list[a%16])
        a = a//16
    output.reverse()   
    return '0x' + ''.join(output)

a = 760402852596084587359490684321824034940816612213847025986535451828145781910762684416
print(make_hex(a))
print(hex(a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...