通过python/ctypes获取内存范围的结束内存地址

通过python/ctypes获取内存范围的结束内存地址,python,unit-testing,ctypes,python-2.5,Python,Unit Testing,Ctypes,Python 2.5,我正在用python为(硬件)C接口创建一个非常基本的(覆盖)单元测试 C接口的功能需要内存地址,因为它直接与内存对话 该功能的原型是: void function( ulong startAddress, ulong endAddress, ulong curAddress, nofPaddingElements ) startAddress、endAddress和CuraAddress基本上是结构数组的内存地址 在web(和stackoverflow;-)上,我发现了一些引用,如果我想使用

我正在用python为(硬件)C接口创建一个非常基本的(覆盖)单元测试

C接口的功能需要内存地址,因为它直接与内存对话

该功能的原型是:

void function( ulong startAddress, ulong endAddress, ulong curAddress, nofPaddingElements )
startAddress、endAddress和CuraAddress基本上是结构数组的内存地址

在web(和stackoverflow;-)上,我发现了一些引用,如果我想使用ctypes做一些事情,这就是我所使用的

对于startAddress和CuraAddress,可以跟随并获得指向第一个条目地址的指针和指向当前条目地址的指针

但是endAddress是个问题。
它是需要由函数分配的内存区域的实际结束地址。
因此,对于长度为10的整数数组,如果你理解了我的意思,那么它就意味着“i[10]的地址”(实际上,人们当然只能使用i[0]直到i[9],但我的意思是,i[10]是第10个条目结束的地址/第11个条目开始的地址==>数组的结束地址)

有人知道我如何通过python/ctypes获得这个终端地址吗

(重构C代码,使其不需要结束地址,这不是一个选项,它已经正常工作多年,只是没有单元测试)


哦,顺便说一句。我目前使用的软件版本是python 2.5(以后的版本使用python 2.7,但首先需要在此版本上开发)

如果您知道结构的大小和数量,您应该能够相对轻松地计算它
ctypes.sizeof()
返回一个结构的大小。我假设
ulong
unsigned long
,但是
long
并不总是大到可以容纳指针(例如,在Windows中它总是4个字节)。对C函数中的地址使用
intptr\u t
。@eryksun:因为它是稳定的工作代码,所以不允许我更改接口。我在Solaris上工作(它将被移植到Linux上),根据web,在我为之编程的公司所使用的两个版本上,long的长度都是8字节。因此,它将持有一个指针。Thanx无论如何,对于您的commentStill,您可以将这些参数定义为ctypes中的指针,例如
function.argtypes=(c\u void\u p,c\u void\u p,c\u void\u p,c\u ulong)
。然后您可以使用
byref
来编写更接近于使用C语言的
&
的代码。例如:
函数(i,byref(i,sizeof(i.(u type))*10),byref(i,sizeof(i.(u type))*k),npad)
。注意第一个参数不需要
byref
,因为数组是作为指针传递的,但是如果需要,可以使用
byref(i)
。第二个参数使用可选的偏移量参数。如果数组元素是非简单类型(例如
结构
数组
,或
\u指针
实例),则可以简化该位。在这种情况下,索引数组将返回一个ctypes数据类型,该数据类型可以传递给
byref
。例如:
函数(i,byref(i[9],sizeof(i[0])),byref(i[k]),npad)