【发布时间】:2016-12-08 04:38:03
【问题描述】:
如果我有两个十六进制字符串,并且想将一个转换为 32 位无符号整数,另一个转换为 64 位无符号整数,我将提供 int() 函数的基数?
【问题讨论】:
如果我有两个十六进制字符串,并且想将一个转换为 32 位无符号整数,另一个转换为 64 位无符号整数,我将提供 int() 函数的基数?
【问题讨论】:
嗯,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 测试)
【讨论】:
所以我搞砸了,int() 不能确定十六进制字符串的大小或符号。
根据定义,十六进制是 16。所以你可以在你的字符串中放入十六进制基数 16
int('A1S31231', 16)
32 位和 64 位之间的问题只是作为参数输入的字符串的大小。
由于它们的大小,
2 个十六进制字符 = 1 个字节
所以如果我有一个 64 位 int,它将是 8 个字节或 16 个字符的十六进制字符串。 如果我有一个 32 位 int,它将是 4 个字节或 8 个字符的十六进制字符串。
Based off Duncan's answer:为了让你的结果无符号。您需要使用正确的掩码获取结果并 & 他们。
如果您希望从十六进制转换为 uint32,您可以进行上述 int() 转换,然后
result & 0xffffffff
如果您想从 hex 转换为 uint64,您可以进行上述 int() 转换,然后
result & 0xffffffffffffffff
【讨论】: