سؤال

أحتاج إلى التحويل بين كائنات بيثون و C سلاسل من الترميزات المختلفة. كان الذهاب من سلسلة AC إلى كائن Unicode بسيط إلى حد ما باستخدام Pyunicode_Decode، ومع ذلك، لست متأكدا من كيفية الذهاب في الاتجاه الآخر

//char* can be a wchar_t or any other element size, just make sure it is correctly terminated for its encoding
Unicode(const char *str, size_t bytes, const char *encoding="utf-16", const char *errors="strict")
    :Object(PyUnicode_Decode(str, bytes, encoding, errors))
{
    //check for any python exceptions
    ExceptionCheck();
}

أريد إنشاء وظيفة أخرى تأخذ سلسلة Unicode Python ووضعها في مخزن مؤقت باستخدام مزود معين، على سبيل المثال:

//fills buffer with a null terminated string in encoding
void AsCString(char *buffer, size_t bufferBytes,
    const char *encoding="utf-16", const char *errors="strict")
{
    ...
}

أظن أن لديها شيء له علاقة ب Pyunicode_asencodededstring ولكن هذا يعيد Pyobject لذلك أنا لست متأكدا من كيفية وضع ذلك في المخزن المؤقت الخاص بي ...

ملاحظة: كلتا الطريقتين أعلاه هي أعضاء في فئة Unicode C ++ التي تلتف على Python API، فأنا باستخدام Python 3.0

هل كانت مفيدة؟

المحلول

أظن أن لديها شيء له علاقة ب Pyunicode_asencodededstring ولكن هذا يعيد Pyobject لذلك أنا لست متأكدا من كيفية وضع ذلك في المخزن المؤقت الخاص بي ...

تعد Pyobject عاد pystringoBject، لذلك تحتاج فقط إلى استخدام PyString_Size و PyString_AsString للحصول على مؤشر إلى المخزن المؤقت السلسلة و MEMCPY ذلك إلى المخزن المؤقت الخاص بك.

إذا كنت تبحث عن وسيلة للذهاب مباشرة من كائن Pyunicode إلى المخزن المؤقت Char الخاص بك، لا أعتقد أنه يمكنك القيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top