سؤال

لا يمكن العثور بالضبط طريقة حول كيفية القيام بما يلي في C / C ++.

والإدخال: القيم hexdecimal، على سبيل المثال: ffffffffff ...

ولقد حاولت التعليمات البرمجية التالية من أجل قراءة المدخلات:

uint16_t twoBytes;
scanf("%x",&twoBytes);

وولهذا يعمل بشكل جيد وكل شيء، ولكن كيف يمكنني تقسيم 2bytes في القيم 1bytes uint8_t (أو ربما حتى قراءة البايت الأول فقط). ترغب في قراءة البايت الأول من المدخلات، وتخزينها في مصفوفة بايت في موقف اختيار.

uint8_t matrix[50][50]

وبما أنني لست ماهرة جدا في صيغة / القراءة من الإدخال في C / C ++ (ولقد استخدمت فقط scanf حتى الآن) أي أفكار أخرى حول كيفية القيام بذلك بسهولة (وبسرعة اذا مضت) هو موضع تقدير كبير.

وتحرير: وجدت حتى أفضل طريقة باستخدام الدالة fread لأنه يتيح واحد يحدد عدد بايت يجب أن يقرأ من تيار (ستدين في هذه الحالة)، وحفظ لمتغير / مجموعة

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

ومعلمات

وPTR - مؤشر إلى كتلة من الذاكرة مع الحد الأدنى من حجم (حجم * العد) بايت

وحجم - الحجم بالبايت من كل عنصر يمكن ان تقرأ

والاعتماد - عدد من العناصر، كل واحد مع حجم بايت حجم

وتيار - مؤشر إلى كائن FILE يحدد تيار الإدخال.

cplusplus المرجع

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

المحلول

و%x يقرأ على unsigned int، وليس uint16_t (يعتقد أنها قد تكون هي نفسها على منصة التشغيل الخاصة بك).

لقراءة فقط بايت واحد، حاول هذا:

uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;

وهذا يقرأ على unsigned int، ولكن توقف بعد قراءة حرفين (حرفين عرافة يساوي ثمانية بت، أو بايت واحد).

نصائح أخرى

ويجب أن تكون قادرة على تقسيم متغير مثل هذا:

uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;

وزوجان من الأفكار:

1) قراءتها على أنها أحرف وتحويلها يدويا - مؤلم

2) إذا كنت تعرف أن هناك من مضاعفات الرقم 4 hexits، يمكنك أن تقرأ فقط في twobytes ومن ثم تحويلها إلى قيم بايت واحد مع twobytes = مرتفع << 8؛ منخفض = twobyets وFF؛

و3)٪ 2X

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