انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: سید مسعود امامیان در 18 بهمن 1391، 08:01 ب‌ظ

عنوان: بیت های حالت در زبان سی++
ارسال شده توسط: سید مسعود امامیان در 18 بهمن 1391، 08:01 ب‌ظ
سلام دوستان

بیت های حالت (مثلا ios::binary) توی کیوت کار نمی کنن ؟! یجا خوندم چون در حالت های نوشتاری گنو/لینوکس تفاوتی وجود نداره
پس نیازی به بیت های حالت نیست !

خب اگر کسی بخواد محتویات رو به حالت باینری در بیاره چاره چیست ؟!
عنوان: پاسخ : بیت های حالت در زبان سی++
ارسال شده توسط: majidkamali1370 در 18 بهمن 1391، 10:37 ب‌ظ
من خیلی یلد نیستم و نمیدونم ios::binary دقیقا چه تاثیری داره ولی توی حالت متنی، مثلا توی فایل نوشته ۱۲۳، c++ میاد این ۱۲۳ رو به عدد تبدیل میکنه و میریزه توی یه int یا به ۳ تا کاراکتر تبدیل میکنه و میریزه توی سه کاراکتر (در سه مرحله) یعنی با خود ِ اون نوشته ها کار داره. مثلا وقتی شما توی برنامه میگی عدد 2 رو بریز توی فایل، کاراکتری میریزه توی فایل، یعنی وقتی فایل رو باز کنی، توش نوشته 2 ولی توی حالت binary وقتی میگی 10 رو بریز توی فایل، یه کاراکتر با کد عددی ۱۰ میسازه و میریزه توی فایل، که میشه یه خط جدید.

البته فکر کنم اینکه قبل از ریختن توی فایل اون اطلاعات رو به چی cast کنی، تاثیر داشته باشه. مثلا اگه به char تبدیل کنی، میشه همون حالت binary
OutputFile << (char)65;خروجی این فایل میشه حرف a.

امیدوارم درست گفته باشم.
عنوان: پاسخ : بیت های حالت در زبان سی++
ارسال شده توسط: سید مسعود امامیان در 18 بهمن 1391، 11:19 ب‌ظ
خب یه سوال به سوال اضافه شد !

میشه گفت به حالت باینری سرعت پردازش بیشتر میشه ! خب فرض کنید یک کلاس بزرگ به همراه کلاس های مشتق شده اش داشته باشیم
به اون روشی که شما گفتین نمیشه که اشیاء رو به صورت باینری ذخیره کرد ! از طرفی چون حجم اطلاعات زیاد هست ذخیره اطلاعات به
صورت باینری بهتر خواهد بود .
یه تاثیری هم روی کاراکترهای خط جدید مثل n/ داره ! دقیق نمی دونم ((:
عنوان: پاسخ : بیت های حالت در زبان سی++
ارسال شده توسط: majidkamali1370 در 18 بهمن 1391، 11:57 ب‌ظ
نقل‌قول
میشه گفت به حالت باینری سرعت پردازش بیشتر میشه
دقیقا درست میفرمایید. همچنین حجم اطلاعات پایین میاد.

راهی که میشه اشیا رو به صورت باینری ذخیره کرد اینه:
OutPutFile.write(reinterpret_cast<const char*>(MyClassObject), sizeof(MyClass));یه روش دیگه هم اینه:
]OutputFile.write( ( const char* )this, sizeof( MyClass ) );
توی روش دوم reinterpret_cast نداره. با هر کدوم راحتترید کار کنید.
البته دقت داشته باشید که در روش دوم this یه اشاره گر هست. اگه شیء بود، یه & بزارید قبلش.