جهة ترتيب البايتات

ترتيب البايتات أو اتجاه البايتات أو اتجاه البيانات ؟؟؟ endianness

تستخدم الحواسيب المعاصرة نظام عنونة ذاكرة يسمح بالقراءة والكتابة على مستوى البايت الواحد (byte addressable memory)، أما المعالج فيستطيع التعامل مع عرض كلمة أكبر مثل 32 بت أو 64 بت. فالمتغيرات من نوع int32 مثلاً تحتاج إلى 4 عناوين في الذاكرة لتخزينها. ترتيب البايتات يحدد إذا كان المعالج سيقرأ ويكتب الكلمات في الذاكرة بدءاً من اليسار لليمين (من البايت الأكثر أهمية إلى الأقل أهمية) أو العكس.

يمكن ترتيب البايتات عند تخزينها في الذاكرة أو إرسالها عبر الشبكة في أحد طريقتين:

Big-endian (BE)

عند استخدام big-endian تُخزّن كلمات البيانات في الذاكرة بحيث يكون البايت الأكثر أهمية في عنوان الذاكرة الأقل، والبايت الأقل أهمية في عنوان الذاكرة الأعلى. عند إرسال البيانات عبر وسط اتصال ما، ترسل البيانات بدءاً من البايت الأكثر أهمية أولاً.

Little-endian (LE)

عند استخدام little-endian تُخزّن كلمات البيانات في الذاكرة بحيث يكون البايت الأقل أهمية في عنوان الذاكرة الأقل، والبايت الأكثر أهمية في عنوان الذاكرة الأعلى. عند إرسال البيانات عبر وسط اتصال ما، تُرسَل البيانات بدءاً من البايت الأقل أهمية أولاً.

مثلاً، قيمة int32 التالية: 12 34 56 7816

تُخزَّن في little-endian بالشكل التالي:

عنوان الذاكرةaa+1a+2a+3
7816561634161216

أما في big-endian فهي تخزّن بالشكل التالي:

عنوان الذاكرةaa+1a+2a+3
1216341656167816

ترتيب big-endian هو الترتيب الأشهر في بروتوكولات الشبكات، مثل بروتوكول الإنترنت، حيث ترسل البايتات بدءاً من البايت الأكثر أهمية أولاً. بينما يستخدم little-endian بكثرة في معماريات معالجات الحواسيب مثل معمارية x86 ومعظم معالجات ARM ومعالجات RISC-V.

ترتيب البايتات في الملفات

الملفات النصيّة

يمكن أن تبدأ ملفات يونيكود النصية اختيارياً بعلامة ترتيب البايتات BOM—Byte Order Mark للدلالة على اتجاه ترتيب البايتات في ذلك الملف. رمز علامة BOM هو U+FEFF، وبالتالي في ملف يونيكود 32 يتبع ترتيب big-endian ستكون بادئة الملف هي ‎00 00 FE FF أما في حال استخدام ترتيب little-endian ستكون بالشكل ‎FF FE 00 00.