【问题标题】:uint32 vs uint64: What bases do I need for the 'int()' function to work properlyuint32 vs uint64:“int()”函数需要什么基础才能正常工作
【发布时间】:2016-12-08 04:38:03
【问题描述】:

如果我有两个十六进制字符串,并且想将一个转换为 32 位无符号整数,另一个转换为 64 位无符号整数,我将提供 int() 函数的基数?

【问题讨论】:

标签: python int hex


【解决方案1】:

嗯,python 通常决定自己分配多少内存。请参阅以下示例:

>>> type(int('0x7fffffff', 16))
<type 'int'>
>>> type(int('0x80000000', 16))
<type 'long'>

根据数字的大小,Python 分配适量的内存。

但是如果你使用long()而不是int()总是会分配8个字节,不管数字是多少:

>>> type(long('0x7fffffff', 16))
<type 'long'>
>>> type(long('0x80000000', 16))
<type 'long'>

*针对 Python 2.7 测试(未针对 3.x 测试)

【讨论】:

  • 在 python 3 中,int 和 long 没有区别。每个整数可以任意大(只要你有足够的内存)。
【解决方案2】:

所以我搞砸了,int() 不能确定十六进制字符串的大小或符号。

根据定义,十六进制是 16。所以你可以在你的字符串中放入十六进制基数 16

int('A1S31231', 16)

32 位和 64 位之间的问题只是作为参数输入的字符串的大小。

由于它们的大小,

2 个十六进制字符 = 1 个字节

所以如果我有一个 64 位 int,它将是 8 个字节或 16 个字符的十六进制字符串。 如果我有一个 32 位 int,它将是 4 个字节或 8 个字符的十六进制字符串。

Based off Duncan's answer:为了让你的结果无符号。您需要使用正确的掩码获取结果并 &amp; 他们。

如果您希望从十六进制转换为 uint32,您可以进行上述 int() 转换,然后

result & 0xffffffff

如果您想从 hex 转换为 uint64,您可以进行上述 int() 转换,然后

result & 0xffffffffffffffff

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多