سؤال

لدي مجموعة من قيم عرافة مخزنة مثل UINT32 *

  • 2009-08-25 17: 09: 25.597 الجسيمات [1211: 20B] 68000000
  • 2009-08-25 17: 09: 25.598 الجسيمات [1211: 20B] A9000000
  • 2009-08-25 17: 09: 25.598 الجسيمات [1211: 20B] 99000000

عندما أتحول إلى INT كما هو الحال، إنها قيم مجنونة عندما يجب أن تكون من 0-255، على ما أعتقد. أعتقد أنني بحاجة فقط لاستخراج أول رقمين. كيف أقوم بهذا العمل؟ حاولت تقسيم 1000000 ولكن لا أعتقد أن هذا يعمل في عرافة.

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

المحلول

الهدف C هو أساسا C مع أشياء إضافية في الأعلى. عمليات التحول المعتادة الخاصة بك (my_int >> 24 أو أيا كان) يجب أن تعمل.

نصائح أخرى

نظرا لأنك تتوقع <255 لكل قيمة وتم تعيين أعلى بايت فقط في بيانات العينة التي نشرتها، فهي تبدو وكأنها الانتخابات يتم خلطه - قمت بتحميل رقم إينيان كبير ثم فسره بأنه إيدان صغير، أو العكس، مما يؤدي إلى أن يكون ترتيب البايتات بالترتيب الخاطئ.

على سبيل المثال، لنفترض أن لدينا الرقم 104 المخزنة في 32 بت على جهاز نبيذ كبير. في الذاكرة، ستكون البايتات: 00 00 00 68. إذا قمت بتحميل ذلك في الذاكرة على جهاز نبيذ صغير، فسيتم تفسير هذه البايتات على أنها 68000000.

أين حصلت على الأرقام من؟ هل تحتاج إلى تحويلها إلى ترتيب البايت؟

هذا يبدو تماما وكأنه قضية نبيذ. ما إذا كان الأمر كذلك، يجب أن يؤدي التحول البسيط إلى الوظيفة:

uint32_t saneValue = insaneValue >> 24;

يجب أن يعمل التقسيم بواسطة 0x1000000 (أيه 16 ^ 6 = 2 ^ 24، وليس 10 ^ 6). هذا هو نفسه التحول في البتات بحلول 24 عاما (لا أعرف بناء جملة OBJC، آسف).

حاول استخدام الوظيفة NSSwapInt(), ، بمعنى آخر

int x = 0x12345678;
x = NSSwapInt(x);
NSLog (@"%x", x);

يجب طباعة "78563412".

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