python获取内存地址的值的问题

Python调用C动态库,回调函数中的参数是c_void_p类型时,如果想取得c_void_p参数指向的地址的值,该怎么做?
c回调

typedef void (*callbakc) (void * buf);

void (*callbakc) (void * buf)
{
    int *ptr = new int(0);
    buf = ptr;
}

python中的定义

def callback(buf):
    # 此处想通过buf得到值0。尝试过string_at,返回的是str类型的乱码。
    # string = string_at(buf) 

CALLBACKFUNC = CFUNCTYPE(None,c_void_p)
call = CALLBACKFUNC(callback)

如上,在C中创建了一个指向值是0的指针ptr,python的回调函数中,buf返回的是int类型,其值是ptr的内存地址,那么怎么通过这个内存地址得到值0呢?

python获取内存地址的值方法也许可以更简单

import ctypes
print(ctypes.cast(id(a), ctypes.py_object).value)
#a是变量或者其他对象,id()函数获取这个对象的内存地址,调用cytypes.cast获取对应内存地址的值