جهة ترتيب البايتات
ترتيب البايتات أو اتجاه البايتات أو اتجاه البيانات ؟؟؟ endianness
تستخدم الحواسيب المعاصرة نظام عنونة ذاكرة يسمح بالقراءة والكتابة على مستوى البايت الواحد (byte addressable memory)، أما المعالج فيستطيع التعامل مع عرض كلمة أكبر مثل 32 بت أو 64 بت. فالمتغيرات من نوع int32 مثلاً تحتاج إلى 4 عناوين في الذاكرة لتخزينها. ترتيب البايتات يحدد إذا كان المعالج سيقرأ ويكتب الكلمات في الذاكرة بدءاً من اليسار لليمين (من البايت الأكثر أهمية إلى الأقل أهمية) أو العكس.
يمكن ترتيب البايتات عند تخزينها في الذاكرة أو إرسالها عبر الشبكة في أحد طريقتين:
Big-endian (BE)
عند استخدام big-endian تُخزّن كلمات البيانات في الذاكرة بحيث يكون البايت الأكثر أهمية في عنوان الذاكرة الأقل، والبايت الأقل أهمية في عنوان الذاكرة الأعلى. عند إرسال البيانات عبر وسط اتصال ما، ترسل البيانات بدءاً من البايت الأكثر أهمية أولاً.
Little-endian (LE)
عند استخدام little-endian تُخزّن كلمات البيانات في الذاكرة بحيث يكون البايت الأقل أهمية في عنوان الذاكرة الأقل، والبايت الأكثر أهمية في عنوان الذاكرة الأعلى. عند إرسال البيانات عبر وسط اتصال ما، تُرسَل البيانات بدءاً من البايت الأقل أهمية أولاً.
مثلاً، قيمة int32 التالية:
12 34 56 78
16
تُخزَّن في little-endian بالشكل التالي:
عنوان الذاكرة | a | a+1 | a+2 | a+3 |
---|---|---|---|---|
7816 | 5616 | 3416 | 1216 |
أما في big-endian فهي تخزّن بالشكل التالي:
عنوان الذاكرة | a | a+1 | a+2 | a+3 |
---|---|---|---|---|
1216 | 3416 | 5616 | 7816 |
ترتيب 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
.