هل يمكن لأحد أن يشرح لي الإزاحات السداسية؟

StackOverflow https://stackoverflow.com/questions/141262

  •  02-07-2019
  •  | 
  •  

سؤال

لقد قمت بتنزيل Hex Workshop، وطُلب مني قراءة ملف ‎.dbc.

يجب أن يحتوي على 28،315 إذا قرأت إزاحة 0x04 و 0x05

أنا غير متأكد من كيفية القيام بذلك؟ماذا يعني 0x04؟

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

المحلول

0x04 هو رقم سداسي عشري لـ 4 (0x هو مجرد اصطلاح بادئة شائع لتمثيل الأرقام ذات الأساس 16 - نظرًا لأن العديد من الأشخاص يفكرون بالنظام العشري)، وسيكون هذا هو البايت الرابع (نظرًا لأنهم يقولون إزاحة، فمن المحتمل أن يحسبوا البايت الأول كـ البايت 0، لذا فإن الإزاحة 0x04 ستكون البايت الخامس).

أعتقد أنهم يقولون أن البايت الرابع والخامس معًا سيكونان 28315، لكن هل قالوا ما إذا كان هذا هو endian الصغير أو endian الكبير؟

28315 (عشري) هو 0x6E9B بالتدوين الست عشري، ربما في الملف بالترتيب 0x9B 0x6E إذا كان صغيرًا.

ملحوظة:تشير النهاية الصغيرة والنهاية الكبيرة إلى ترتيب كتابة وحدات البايت.عادةً ما يكتب البشر التدوين العشري والنظام السداسي العشري بطريقة نهاية كبيرة، لذلك:

سيتم كتابة 256 كـ 0x0100 (الأرقام الموجودة على اليسار هي أكبر مقياس)

لكن هذا يتطلب بايتين وستقوم الأنظمة ذات النهاية الصغيرة بكتابة البايت المنخفض أولاً:0x00 0x01.ستكتب الأنظمة ذات النهاية الكبيرة البايت العالي أولاً:0x01 0x00.

عادةً ما تكون أنظمة Intel ذات نهاية صغيرة وتختلف الأنظمة الأخرى.

نصائح أخرى

فكر في الملف الثنائي كمصفوفة خطية من البايتات.

سيكون 0x04 هو العنصر الخامس (في المصفوفة المستندة إلى 0) في المصفوفة، وسيكون 0x05 هو العنصر السادس.

يمكن إجراء عملية OR'ed للقيمتين في 0x04 و0x05 معًا لإنشاء الرقم 28,315.

نظرًا لأن القيمة التي تقرأها هي 16 بت، فأنت بحاجة إلى نقل قيمة واحدة أكثر ثم أو معًا، على سبيل المثال، إذا كنت تتعامل مع الملف في c#، فستستخدم شيئًا مثل هذا:

int value = (ByteArray[4] >> 8) | ByteArray[5]);

نأمل أن يساعد هذا في شرح كيفية عمل العناوين السداسية.

إنه رمز XX الرابع والخامس الذي تشاهده...

1   2  3  4  5  6
01  AB 11 7B FF 5A

إذن، 0x04 و0x05 هما "7B" و"FF".

بافتراض ما تقوله، في حالتك، يجب أن تكون 7BFF مساوية للقيمة المطلوبة.

هث

0x04 بالنظام الست عشري هو 4 بالنظام العشري.0x10 بالنظام الست عشري يساوي 16 بالنظام العشري. calc.exe يمكن التحويل بين الست عشري والعشري بالنسبة لك.

الإزاحة 4 تعني 4 بايت من بداية الملف.الإزاحة 0 هي البايت الأول في الملف.

انظر إلى البايتات 4 و5، حيث يجب أن تحتوي على القيم 0x6E 0x9B (أو 0x9B 0x6E) اعتمادًا على نوعك.

يبدأ هنا.بمجرد أن تتعلم كيفية قراءة القيم السداسية العشرية، ستكون في حالة أفضل بكثير لحل مشكلتك فعليًا.

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