替换ctypes c_char数组中的值

时间:2016-01-16 05:34:59

标签: python ctypes

我有一个程序可以创建8192个字节的数据。 现在我想更改下面的值returnBuffer是我的数组:

serialBuff = returnBuffer[0x14:0x28]
DataToWrite = "15510580029600000000"

returnBuffer = returnBuffer.replace(serialBuff, DataToWrite)

但我得到的结果是:

AttributeError: 'c_char_Array_8192' object has no attribute
'replace'

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

错误是因为数组没有replace方法。据我所知,他们没有面向公众的方法。

为了替换内容你可以执行1比1的分配(不需要用十六进制写计数器,但允许这样做,为什么不呢):

for i in range(0x14, 0x28):
    returnBuffer[i] = DataToWrite[i - 0x14]

或使用切片(由@eryksun建议):

returnBuffer[0x14: 0x28] = DataToWrite.encode('utf-8')

其中一个应该可以解决问题。

作为一个更简单的值的例子:

In [71]: arr = 5 * ctypes.c_char

In [72]: c_arr = arr("0", "1", "2", "3", "4")

In [73]: print c_arr[:]
01234

In [74]: replaceVals = "321"

In [75]: for i in range(0x1, 0x4):
    ...:     c_arr[i] = replaceVals[i - 0x1]


In [76]: print c_arr[:]
"03214"

或者,切片:

In [77]: c_arr[0x1: 0x4] = raplce.encode('utf-8')
In [78]: c_arr[:]
"03214"