result_list = []
listdyn_addr = (ctypes.c_void_p * len(listdyn)).from_buffer(listdyn)
for i in xrange(0, len(listdyn)):
str_pointer = listdyn_addr[i]
try:
value = ctypes.c_char_p(str_pointer).value
if value == '':
result_list.append('')
else:
result_list.append(0 if not value else value)
except:
result_list.append(str_pointer)
print result_list
2)如何转换为字符串或字符 如果
list1_
中只有字符串值,则使用下一个代码将listdyn
转换为字符串:或者简单地说(正如eryksun正确地注意到的那样):
^{pr2}$但问题是,
^{3}$list1_
中可能有int值。E、 g.:字符串对象的值(})可以通过它们的(objects)地址找到,但是int值(0和123)将作为地址(0x00和0x7b=123,以十六进制形式)存储在c_char_p_数组中。因此,如果您尝试使用代码获取第5项(123)的值:
'Demo'
,''
,'string'
和{print ctypes.cast(listdyn[5], ctypes.c_char_p).value
,在Windows上将发生下一个错误:ValueError: invalid string pointer 0x000000000000007B
但是在Linux下会出现分割错误。在
因此,如果int值在Windows下的
list1_
中,请尝试使用以下代码:结果:
相关问题 更多 >
编程相关推荐