与memset斗争

时间:2016-12-15 10:05:35

标签: python memset

我想有一个像函数一样的指针。由于我只允许传递int作为参数,我希望能够将所有类型的数据传递给函数。 (我无法修改此功能,它在SDK中硬编码)

所以我想使用变量的id,然后将值重新分配给我的函数中的另一个值。

我希望有类似的工作

import ctypes

a = 10
b = 12
print b #here I want 12

ctypes.memset(id(b), a, 8)
print b #here I want 10

使用python类型的可能性很大,这样我也可以传递一个可调用的对象。

1 个答案:

答案 0 :(得分:-1)

更新

由于主线程和后台线程在同一程序上并共享内存。您可以使用单个字典来创建用于存储变量及其键的容​​器:

import random

mystorage = {}


def getint(value):
    while True:
        key = random.randint(0, 0xffffffff)
        if key in mystorage:
            continue
        mystorage[key] = value
        return key


def getvalue(key):
    return mystorage.get(key)

在测试时,如果密钥根据您的情况发生冲突,您可能需要添加写锁定。但通常这适用于多线程程序。

只是想使用int(实际为long)类型来传递任何可选对象:

import codecs
import pickle


def dumps(payload):
    data = pickle.dumps(payload)
    return int(codecs.encode(data, 'hex'), 16)


def loads(intval):
    data = codecs.decode(hex(intval)[2:].encode('ascii'), 'hex')
    return pickle.loads(data)


assert loads(dumps({'foo': 'bar'})) == {'foo': 'bar'}
# no error

如果您使用的是Python 3.2+,您还可以使用int.from_bytes()int.to_bytes()来实现此目的。