繁体   English   中英

在python中处理非常大的十六进制数

[英]Dealing with very large hex numbers in python

我需要转换一个非常大的数字

(760402852596084587359490684321824034940816612213847025986535451828145781910762684416)到十六进制似乎在python中运行(但是当它关​​闭时为N) 我应该做些什么? 我试过 float.hex 但那是徒劳的

所述数字产生0x643437346d684000000000000000000000000000000000000000000000000000000000

结果的十六进制应该是0x643437346d696e3372535f43683334373372535f344e645f4c693452535f30685f6d79

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

你确定是错的? 你可以测试下面的代码。 结果是一样的:

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))

我通过使用不同的函数将其转换然后将其添加为 1 x 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM