سؤال

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

شكرًا.

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

المحلول

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

الجمال هو أن هذا لا يتطلب التحليل.

عليك أن تكون حذراً بشأن قواعد تعبئة الهيكل ، و endian-ness لجعل خريطة الهيكل بنفس الطريقة تمامًا. يعد استخدام وحدات الماكرو C "Offsetof" و "Sizeof" مفيدًا لإبعاد بعض معلومات التصحيح للتحقق من أن هيكلك هو في الواقع رسمًا لما تعتقد أنه رسم الخرائط.

يمكن تغيير قواعد التعبئة عادةً إما عن طريق التوجيهات (مثل #pragma's) أو خيارات سطر الأوامر. endian-ness أنت عالق. إذا كان مختلفًا عن ما يستخدمه نظامك المضمن ، فأعلن أن جميع الحقول كبيوت ، أو استخدم شيئًا مثل الماكرو "NTOH" للقيام بمبادلة البايت.

نصائح أخرى

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

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