ホーム>source

私はCでPython拡張機能を作成していて、bytesオブジェクトを関数に渡そうとしています。明らかに、「s」トークンは文字列用です。私は「O」、「N」、そして運が悪い他のいくつかを試しました。バイトオブジェクトを解析するために使用できるトークンはありますか?そうでない場合、バイトオブジェクトを解析する代替方法はありますか?

<前>ウィズウィズ

Pythonからの呼び出し: static PyObject *test(PyObject *self, PyObject *args) { char *dev; uint8_t *key; if(!PyArg_ParseTuple(args, "ss", &dev, &key)) return NULL; printf("%s\n", dev); for (int i = 0; i < 32; i++) { printf("Val %d: %d\n", i, key[i]); } Py_RETURN_NONE; }

test("device", f.read(32))
あなたの答え
  • 解決した方法 # 1

    解析フォーマット文字列のドキュメントを読んだら、それはかなり明確です。

    ウィズウィズ   s を取得するためだけです   NUL からの終了したUTF-8エンコードCスタイル文字列  オブジェクト(最初の引数には適切ですが、2番目の引数には適していません)。

    ウィズウィズ  ドキュメントで特に強調されています(元のテキストで強調されています):

    ウィズウィズ

    ウィズウィズ  呼び出し元に不変の str を提供するよう要求する代わりに、機能する のようなオブジェクト、 y* などのものを除く  そして

    This is the recommended way to accept binary data.

    s。

    y#

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ couchdb - サイズMのjson値を指す単一のキーのN個の異なるバージョン、またはサイズM/Nの値を持つN個の異なるキー