如何用python将十六进制转换为有符号long-long?

2024-10-05 17:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个十六进制字符串f6befc34e3de2d30。我想把它转换成有符号的long long,但是

x['id'], = struct.unpack('>q', 'f6befc34e3de2d30'.decode('hex'))

给出:

^{pr2}$

预期的。在

谢谢!在


Tags: 字符串id符号structlongdecodehexunpack
1条回答
网友
1楼 · 发布于 2024-10-05 17:26:20

你可以做long('f6befc34e3de2d30', 16)

bin(long('f6befc34e3de2d30', 16))
>>> '0b1111011010111110111111000011010011100011110111100010110100110000'

编辑:跟进@Paul Panzer的评论。对于基于ALU硬件的C类型的long实现,这是正确的。您不能有符号的整数大于2^63。但是,Python的实现不同,它依赖于大数的数组表示和Karatsuba算法进行算术运算。这就是为什么这个方法有效。在

编辑2:以下是OPs问题。不存在“第一位作为标志”的问题。在您的问题中,您明确希望使用Python的long构造,对于这种结构,它的实现并不是您所期望的那样,它使用的表示与您可能熟悉的C中的表示不同,而是将大整数表示为一个数组。所以如果你想实现某种第一位逻辑,你必须自己去做。我没有这方面的文化和经验,所以下面的内容可能会完全错误,因为有人知道他的东西,但还是让我给你我的看法。在

我看到了两种方法。在第一种方法中,您同意要使用的最长时间的约定,然后实现与ALU相同的逻辑。让我们假设为了便于讨论,我们希望使用[-2^127, 2^127-1]范围内的符号long。我们可以做以下事情

^{pr2}$

对于第二种方法,您不认为存在MAX_LONG,但第一位始终是符号位。然后您必须修改上面的parse_nb方法。我把它作为练习:)。在

相关问题 更多 >