我有这段代码:
from cpython cimport array
...
a = array.array("l")
array.resize_smart(a, 10)
...
# String here - some string which i want to parse into long
a[0] = long(string)
从long int创建数组,当我在linux环境中编译此代码时,一切正常,Cython将此l类型转换为long int
,但在某些Windows编译器中,此long int
是4-字节长。
我想用8字节的int(long long)创建一个数组,但我不知道Cython中的代码是多长时间的代码?即我应该在那条线上放置什么而不是"l"
?
第二个问题:我之前在Cython代码中使用了long(string),从字符串中解析了很长时间,但是我现在应该用什么来从字符串中获取长数字?
已更新:根据此https://docs.python.org/3/library/array.html 'q'
,但似乎此解决方案仅适用于3.x
已更新:在@DavidW建议之后,我将该代码改写为:
cimport numpy as np
import numpy as np
np.import_array()
...
cdef np.ndarray[np.int64_t] a = np.arange(0, dtype=np.int64)
a = np.resize(a, len(a) + 1)
...
a[0] = np.int64(string)
答案 0 :(得分:1)
如果你能够使用numpy,你可以很容易地指定64位整数。
a = np.zeros(shape,dtype='i8')
或等效
a = np.zeros(shape,dtype=np.int64)
(您可以用zeros
替换各种各样的数组创建函数。
要从字符串转换为64位int,您只需
np.int64(string)
如果您只想使用标准库,我不知道一个很好的通用解决方案。
请注意,这个答案中没有任何内容实际上是Cython特有的 - 它与纯Python一样好用。