تقنية

create_string_buffer في بايثون: هل value تعيد كل البايتات؟

raw تضم أربعة بايتات
المخزن الكامل. [1] [2]

ننشئ مخزنًا لبايتات مؤلفة، بينها NUL. [1] [2]

الخلاصة السريعة

لا؛ value تتوقف عند أول NUL هنا. [1] [2]

  • المدخل b"A\0B" ثلاثة بايتات. [1] [2]
  • دون حجم صريح يُضاف موضع لإنهاء NUL. [1] [2]
  • sizeof(b) يعطي 4؛ raw تضم البايتات الأربعة. [1] [2]
  • value تعطي b'A'؛ لم تختفِ B من المخزن. [1] [2]
  • اختبرنا 3.12.14؛ لا نستدعي دالة مكتبة خارجية. [1] [2]

المثال

from ctypes import create_string_buffer, sizeof
b=create_string_buffer(b"A\0B")
print(sizeof(b))
print(b.raw)
print(b.value)

[1] [2]

المحتوى والقيمة

المخزن الكامل 41 00 42 00 بالست عشري. توقف القراءة كسلسلة عند أول بايت صفري يعطي 41 وحده؛ لا يحذف الباقي. الناتج 4، ثم b'A\x00B\x00'، ثم b'A'. [1] [2]

value تتوقف عند NUL
قيمة السلسلة. [1] [2]

كيف تحققنا؟

قرأنا raw قبل value وبعدها فبقيت متطابقة. عندما بدلنا البايت الصفري الداخلي بـC، صارت القيمة b'ACB'. [1] [2]

حدود المثال

مصفوفة محارف مؤلفة بحجم افتراضي؛ ليست فك ترميز أو استدعاء C. لا نعمم النتيجة على مخزن بحجم صريح أو مؤشر مجهول. [1] [2]

المراجع

  1. Python: ctypes
  2. CPython3.12.14: ctypes constructor
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.