سؤال

وبالضبط ما يلي: هل طول سلاسل يساوي حجم بايت؟ لا يهم من لغة؟

وأعتقد أنه هو، ولكن أريد فقط للتأكد.

معلومات إضافية: أنا فقط أتساءل بشكل عام. كان وضعي معين PHP مع الخلية.

وبما أن الجواب هو لا، هذا كل ما تحتاج معرفته.

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

المحلول

وكلا. سلسلة إنهاء الصفر ديها بايت إضافية واحدة. سلسلة باسكال (وshortstring دلفي) لديها بايت إضافية للطول. وسلاسل يونيكود لديها أكثر من بايت واحد لكل حرف.

حسب يونيكود ذلك يعتمد على الترميز. يمكن أن يكون 2 أو 4 بايت لكل حرف أو حتى مزيج من 1،2 و 4 بايت.

نصائح أخرى

وهذا يعتمد كليا على منصة والتمثيل.

وعلى سبيل المثال، في. NET سلسلة يأخذ بايت اثنين في الذاكرة في UTF-16 نقطة رمز. ومع ذلك، أزواج بديلة تتطلب اثنين UTF-16 قيم حرف Unicode الكامل في نطاق U + 100000 لU + 10FFFF. لديه شكل في الذاكرة أيضا النفقات العامة لطول السلسلة وربما بعض الحشو، وكذلك النفقات العامة الكائن الطبيعي للمؤشر نوع الخ.

والآن، عند كتابة سلسلة إلى القرص (أو الشبكة، الخ) من .NET، عليك تحديد الترميز (مع معظم فئات التخلف إلى UTF-8). في تلك المرحلة، وحجم يعتمد كثيرا على الترميز. ASCII دائما يأخذ بايت واحد لكل حرف، ولكن محدودة جدا (لا لهجات الخ)؛ UTF-8 يعطي مجموعة الكامل يونيكود مع ترميز متغير (يتم تمثيل كافة الأحرف ASCII في بايت واحد، ولكن البعض الآخر يستغرق أكثر). UTF-32 يستخدم دائما بالضبط 4 بايت أي حرف Unicode - والقائمة تطول

وكما ترون، انها ليست موضوعا بسيطا. للعمل على مقدار المساحة سلسلة هو ذاهب الى اتخاذ فأنت سوف تحتاج إلى تحديد بالضبط ما هو الوضع - سواء كان ذلك كائن في الذاكرة على بعض منصة (وإذا كان الأمر كذلك، وهو منصة - يحتمل أن تكون حتى على إعدادات التطبيق ونظام التشغيل)، أو سواء كان ذلك في شكل المشفرة الخام مثل ملف نصي، وإذا كان الأمر كذلك باستخدام والتي الترميز.

وهذا يعتمد على ما تعنيه ب "طول". إذا كنت تقصد "عدد الأحرف" ثم، لا، العديد من اللغات / أساليب الترميز استخدام أكثر من بايت واحد لكل حرف.

وليس دائما، فإنه يعتمد على الترميز.

وليس هناك جواب واحد. ذلك يعتمد على لغة <م> و التنفيذ (تذكر أن بعض اللغات لها تطبيقات متعددة!)

سلاسل ASCII إنهاء صفر

وتحتل <م> على الأقل واحد أكثر بايت من "محتوى" السلسلة. (يمكن تخصيص أكثر، اعتمادا على كيفية تم إنشاء السلسلة.)

وغير الصفر منتهية سلاسل استخدام واصف (أو بنية مماثلة) لتسجيل طول، والتي تأخذ ذاكرة إضافية <م> مكان .

وسلاسل Unicode (بلغات مختلفة) تستخدم وحدتي بايت لكل حرف.

قد يكون مرجعا

وسلاسل في مخزن كائن عبر مقابض، الذي يضيف طبقة من المراوغة (والمزيد من البيانات) من أجل تبسيط إدارة الذاكرة.

وكنت على صواب. إذا كنت ترميز كما ASCII، هناك بايت واحد لكل حرف. وإلا، فمن بايت واحد أو أكثر لكل حرف.

وعلى وجه الخصوص، فمن المهم أن نعرف كيف يمكن لهذا آثار فرعية العمليات. إذا لم يكن لديك بايت واحد لكل حرف، هل الصورة [ن] الحصول على بايت الألف أو حرف الألف؟ سوف تحصل على حرف الألف تكون غير فعالة لكبير ن بدلا من ثابت، كما هو الحال مع بايت واحد لكل حرف.

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