Cython 中的 8 字节 int (long long) array.array

8-bytes int (long long) in Cython's array.array

我有这个代码:

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 中 long long 的代码是什么? IE。我应该在该行放置什么而不是 "l"

第二个问题:我之前在 Cython 代码中使用 long(string) 来从字符串中解析 long,但是现在我应该使用什么来从字符串中获取 long long 数字?

更新:根据这个 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)

如果您能够使用 numpy,您可以很容易地指定 64 位整数。

 a = np.zeros(shape,dtype='i8')

或等同于

 a = np.zeros(shape,dtype=np.int64)

(您可以用各种数组创建函数代替 zeros)。

要从字符串转换为 64 位 int,您可以这样做

np.int64(string)

如果你只想使用标准库,我不知道有什么好的通用解决方案。

请注意,此答案中没有任何内容实际上是 Cython 特定的 - 它与纯 Python.

一样有效