簡體   English   中英

使用“用 C 擴展 Python”將二進制數據從 C 傳遞到 Python

[英]Passing binary data from C to Python using “Extending Python with C”

可以將二進制數據從 C 傳遞到 Python。 例如,可以將 state 的字節傳遞給 Python?。 也許使用其中一些功能https://docs.python.org/3/c-api/bytes.html

uint32_t state[3] = {0x00000300, 0x00001100, 0x00022200};
unsigned char charstate[1420];
memcpy(charstate, (unsigned char *)state, sizeof(uint32_t)*3);
printf("charstate: %s", charstate);
return PyBytes_FromString(charstate);

我嘗試 PyBytes_FromString 沒有成功(可能是因為 state 不是字符串)

已編輯

另外,我嘗試了@John Zwinck 的回答

   uint32_t state[3] = {0x00000300, 0x00001100, 0x00022200};
   char charstate[12];
   memset(charstate, 0, 12);
   memcpy(charstate, state, sizeof(uint32_t)*3);
   return PyBytes_FromStringAndSize(charstate, sizeof(uint32_t)*3);

現在我在 Python [0, 3, 0, 0, 0, 17, 0, 0, 0, 34, 2, 0] 中看到不等於 state(在 C 中)。

PyBytes_FromString()假設您將一個以空字符結尾的字符串傳遞給它。 但是你的字符串中間有00個字節,這會使 Python 字符串比你想要的短。

相反,請執行以下操作:

PyBytes_FromStringAndSize(charstate, sizeof(uint32_t)*3)

暫無
暫無

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

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