ctypes结构参数理解问题

问题描述 投票:0回答:1

我正在 Python 中使用

ctypes
测试我的结构类。正在阅读
ctypes Document 3.12.0
, 只有
_fields_

class Struct(ct.Structure):
    _fields_ = [
        ('Header', ct.c_short),
        ('Data_int', ct.c_int64),
        ('Data_string', ct.c_char)
               ]

test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = 'bx'
>>> 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-9b3bbfd7aaa9> in <cell line: 4>()
      2 test.Header = 10
      3 test.Data_int = 64
----> 4 test.Data_string = 'bx'

TypeError: one character bytes, bytearray or integer expected

为什么

_fields_
不起作用但下一个起作用?下一张是
_field_


class Struct(ct.Structure):
    _field_ = [
        ('Header', ct.c_short),
        ('Data_int', ct.c_int64),
        ('Data_string', ct.c_char)
               ]

test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = 'bx'
>>>
python c ctypes
1个回答
0
投票

实际的属性名称是

_fields_
ct.c_char
ctype 类型相当于 1 字符字节对象。因此,您需要将一个字符字节对象分配给
test.Data_string
才能使您的第一个片段正常工作。

import ctypes as ct

class Struct(ct.Structure):
    _fields_ = [
        ('Header', ct.c_short),
        ('Data_int', ct.c_int64),
        ('Data_string', ct.c_char)
               ]

test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = b'b'
© www.soinside.com 2019 - 2024. All rights reserved.