سؤال

أحتاج إلى قراءة 32 بت بالضبط من ملف. أنا أستخدم ifstream في STL. هل يمكنني القول مباشرة:

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ifstream::in);
if (my_stream && !my_stream.eof())
   my_stream >> my_int;

... أو هل أحتاج إلى تجاوز المشغل >> للعمل مع INT32؟ لا أرى int32 المدرجة هنا:http://www.cplusplus.com/reference/iostream/istream/operator٪3E٪3E/

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

المحلول

عامل استخراج الدفق (>>) يؤدي منسقة io ، وليس ثنائي io. ستحتاج إلى استخدام std::istream::read في حين أن. ستحتاج أيضًا إلى فتح الملف كـ binary. أوه ، والتحقق std::istream::eof زائد في الكود الخاص بك.

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ios::in | std::ios::binary);
if (my_stream)
{
    my_stream.read(reinterpret_cast<char*>(&my_int), sizeof(my_int));
}
//Be sure to check my_stream to see if the read succeeded.

لاحظ أن القيام بذلك سيقدم اعتماد النظام الأساسي على الكود الخاص بك ، لأن ترتيب البايت في عدد صحيح مختلف على منصات مختلفة.

نصائح أخرى

int32 سوف يكون typedef لأي نوع يحدث أن يكون عدد صحيح موقّع 32 بت على النظام الأساسي الخاص بك. هذا النوع الأساسي سيكون بالتأكيد operator>> تم تحميله على ذلك.

تحديث

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

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