簡體   English   中英

如何將Python的'bytes'對象轉換為ctypes'POINTER(c_byte)'

[英]How to convert a Python 'bytes' object to ctypes 'POINTER(c_byte)'

我想用以下簽名為C函數編寫一個ctypes包裝器:

int utp_process_udp(utp_context *ctx, const byte *buf, size_t len, const struct sockaddr *to, socklen_t tolen);

為了進行類型檢查,我將其添加到Python包裝器中:

libutp.utp_process_udp.argtypes = [POINTER(UtpContext), POINTER(c_byte), c_size_t, POINTER(sockaddr_in), c_int]

但是當我將bytes對象作為buf參數傳遞時,出現此錯誤:

Traceback (most recent call last):
  File "ucat.py", line 269, in <module>
    main()
  File "ucat.py", line 251, in main
    network_loop()
  File "ucat.py", line 138, in network_loop
    utp.utp_process_udp(ctx, data, addr)
  File "/home/mostafa/source/pyutp/utp.py", line 159, in utp_process_udp
    POINTER(c_byte)(data), c_size_t(len(data)),
TypeError: expected c_byte instead of bytes

如果我不設置argtypes我可以成功調用該函數,因此顯然可以bytes對象傳遞給該函數。 我應該做些什么讓ctypes知道我在做什么嗎? 也許是某種演員? 用嘗試ctypes.cast功能,但沒有奏效。)

我只用了POINTER(c_char)而不是POINTER(c_byte) ,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM