PDA

View Full Version : نوشتن در فایل به صورت باینری



mortez maya
شنبه 16 دی 1385, 23:54 عصر
با سلام خدمت دوستان می خواستم بدونم از دوستان اطلاع دارن که چطور میشه در یک فایل کاراکترهایی مثل صفر یا یک رو نوشت به صورتی که هر صفر یا یکی که نوشته می شود فضایی به اندازه 1 bit را اشغال کرده باشد؟ مرسی./

galaxy.ice
یک شنبه 17 دی 1385, 16:52 عصر
اگه file ی که درست میکنی به صورت باینری باشه همونی میشه که میخوای."b"

mortez maya
سه شنبه 19 دی 1385, 12:58 عصر
نمیشه دیگه وقتی شما یک کاراکتر توی فایل باینری میریزی اگه بری تو ویندوز و نگاه کنی حجمش یک بیت نمیشه !

sjj
سه شنبه 19 دی 1385, 13:00 عصر
اگه file ی که درست میکنی به صورت باینری باشه همونی میشه که میخوای."b"
شما امتحان کردی عزیز ؟

sjj
شنبه 23 دی 1385, 17:10 عصر
یعنی کسی نیست جواب ما رو بده ؟

galaxy.ice
یک شنبه 24 دی 1385, 13:24 عصر
:) خوب درست .اولا نباید 1 بیت باشه که.2 شما با چه برنامه ای حجم واقعی فایل و نگا میکنین.3 خوبه که یه کوچولو کتاب ذخیره بازیابی بخونین.

linux
یک شنبه 24 دی 1385, 19:50 عصر
با سلام خدمت دوستان می خواستم بدونم از دوستان اطلاع دارن که چطور میشه در یک فایل کاراکترهایی مثل صفر یا یک رو نوشت به صورتی که هر صفر یا یکی که نوشته می شود فضایی به اندازه 1 bit را اشغال کرده باشد؟ مرسی./
این سوال شما متناقض هست! کارکتر یک معنی داره بیت هم یک معنی شما هیچ وقت نمی توانید کارکتر 0 یا 1 را در یک بیت جا بدهید کارکتر 0 برابر 110000 هست.
اگر شما می خواهید بیت ها را پردازش کنید یک بحث دیگه ای هست

american_iran2006
یک شنبه 24 دی 1385, 20:13 عصر
شاید منظور دوستمون یک بایت باشه

sjj
یک شنبه 24 دی 1385, 23:12 عصر
نخیر دوستان منظور همون بیته.اصلا چطور می تونیم با داده ها بیتی کار کنیم ؟

mortez maya
سه شنبه 26 دی 1385, 23:15 عصر
:) خوب درست .اولا نباید 1 بیت باشه که.2 شما با چه برنامه ای حجم واقعی فایل و نگا میکنین.3 خوبه که یه کوچولو کتاب ذخیره بازیابی بخونین.

سلام خدمت دوستان عزیز جناب گالاکسی عزیز چرا نباید 1 بیت باشه؟ اصولا با ویندوز میبینیم چون ویندوز تعیین میکنه فایل چقدر از حافظه اشغال کرده در مورد بند سوم هم من یه دو سه ترم پیش ذخیره پاس کردم. اما اینا بحث حاشیه ای هستش نمی دونم چرا دوستان این سوال واضح رو اینقدر برا خودشون غیر واضح و متناقض جلوه می دن باور کنید سوال خیلی ساده است جوابشه که مشکله ما می خواهیم یک "0" یا هر چیز دیگری که دوستان اسمشو گذاشتند در یک فایل بنویسیم سپس به محیط ویندوز رفته و به اندازه فایل نگاه کنیم و ببینیم آنجا نوشته است 1 bit آیا امکان دارد یا خیر؟ به همین سادگی./

sh_roohani
چهارشنبه 27 دی 1385, 10:04 صبح
سلام،

عزیز دل برادر، اولا شما کمتر از یک بایت رو که با توابعی که من می شناسم نمی تونید ذخیره کنید. ثانیا اگه می خواین بر حسب بیت کار کنین، باید از عملگرهای bitwise استفاده کنین و هر بیتی رو که می خواین ذخیره کنین در یه بایت اعمال کنین و بعد اون بایت رو ذخیره کنین. ثالثا همیشه باید به یه ترتیبی ردی از این مسئله نگه دارین که چند بیت از آخرین بایتتون معتبره. چون ممکنه شما همه 8 بیت رو با 0 و 1 های معتبر پر نکرده باشین. مثلا می تونین قرارداد کنین که بایت یکی مونده به آخر همیشه تعداد بیتهای معتبر بایت آخر رو نشون بده و بدین ترتیب حتی اگه فقط قرار باشه 1 بیت هم ذخیره کنین به دو بایت نیاز دارین. حالا شاید روش encoding خاصی هم باشه که این نیاز رو از بین ببره. بعد هم محدودیتهای سیستم عامل رو در ذخیره فایلها در نظر بگیرین، منظورم کمینه فضایی هست که سیستم عامل برای یک فایل می گیره، مثلا یک سکتور.

linux
چهارشنبه 27 دی 1385, 18:55 عصر
ذخیره کردن در یک سیستم بستگی کامل به فایل سیستم شما دارد مثلا در ntfs با alocation unit size 4096bye
شما اگر یک فایل درست کنید که حجمش 1 بایت باشه وقتی این فایل ذخیره میشه 4096 بایت جا میگیره در حقیقت وقتی می خواهید اندازه یک فایل را نگاه کنید ما 2 تا اندازه داریم یک اندازه واقعی فایل اندازه ای که روی هارد جا می گیرد

sh_roohani
پنج شنبه 28 دی 1385, 00:25 صبح
دقیقا منظورم از "کمینه فضایی که سیستم عامل برای یک فایل می گیره" همین بود که شما فرمودین.

sjj
پنج شنبه 28 دی 1385, 19:29 عصر
ببینید دوستان من یه برنامه فشرده سازی تو C نوشتم که با الگوریتم هافمن کار می کنه.همونطور که مستحضر هستید این الگوریتم برای کاراکتر های تکراری کدهای باینری مختلفی تولید می کنه.این نکته رو هم می دونیم که به طور معمول هر کاراکتر در فایل به یک بایت فضا احتیاج داره.
حالا اگه ما این کد های هافمن هر کاراکتر رو ، طوری ذخیره کنیم که کمتر از یک بایت فضا اشغال کنه طبق الگوریتم هافمن می تونیم بین 20 تا 90 درصد عمل فشرده سازی رو انجام بدیم.
سوال من اینه که چطور کدهایی که تولید کردیم رو توی فایل ذخیره کنیم که کد معادل برای هر کاراکتر فضایی کمتر از یک بایت اشغال کنه؟
با تشکر.

linux
پنج شنبه 28 دی 1385, 21:12 عصر
ببینید دوستان من یه برنامه فشرده سازی تو C نوشتم که با الگوریتم هافمن کار می کنه.همونطو که مستحضر هستید این الگوریتم برای کاراکتر های تکراری کدهای باینری مختلفی تولید می کنه.این نکته رو هم می دونیم که به طور معمول هر کاراکتر در فایل به یک بایت فضا احتیاج داره.
حالا اگه ما این کد های هافمن هر کاراکتر رو طوری ذخیره کنیم که کمتر از یک بایت فضا اشغال کنه طبق الگوریتم هافمن می تونیم بین 20 تا 90 درصد عمل فشرده سازی رو انجام بدیم.
سوال من اینه که چطور کدهایی که تولید کردیم رو توی فایل ذخیره کنیم که کد معادل برای هر فایل فضایی کمتر از یک بایت اشغال کنه؟
با تشکر.
خوب نمی تونی ما چند روز هست که می گیم نمی تونی!

mortez maya
جمعه 29 دی 1385, 00:40 صبح
جناب لینوکس عزیز غیر ممکنه که نشه! حتما راهی هست باید راهشو پیدا کنیم اگه نمیشد که هافمن این الگوریتم رو اختراع نمی کرد!!؟

sjj
شنبه 30 دی 1385, 00:25 صبح
خوب نمی تونی ما چند روز هست که می گیم نمی تونی!
عزیز دل برادر!نمی تونی یعنی چی ؟ "نشد" که نشد کار!اگه این طوریه پس فشرده ساز ها چطوری کار می کنن؟پس این الگوریتم هافمن با این همه دک و پز کشکه ؟!

linux
شنبه 30 دی 1385, 01:24 صبح
عزیز دل برادر!نمی تونی یعنی چی ؟ "نشد" که نشد کار!اگه این طوریه پس فشرده ساز ها چطوری کار می کنن؟پس این الگوریتم هافمن با این همه دک و پز کشکه ؟!
نخیر کشک نیست!
توی این الگوریتم ها این بیت هایی که شما می فرمایید کنار هم می چینند ازش بایت درست می کنند و از آن بایت استفاده می کنند.
شما در این آدرس راهنمایی کامل به همراه سورس کد برنامه را پیدا خواهید کرد
http://www.w3.org/Graphics/PNG/RFC-1951

sh_roohani
شنبه 30 دی 1385, 09:18 صبح
سلام،

برادر من، آخر آخرش که شما نمی تونین کمتر از حداقل مجاز سیستم عامل روی دیسک، فایل بسازین (که این حداقل هم حداقل یک سکتوره). الگوریتم های فشرده سازی هم اینکار رو توی حافظه می کنن، تازه اونا هم حداقل با یه بایت کار می کنن.
یا اینکه اگه چیز دیگه ای هست و من بی اطلاعم، لطفا به من هم بگین.

sjj
شنبه 30 دی 1385, 10:20 صبح
نخیر کشک نیست!
توی این الگوریتم ها این بیت هایی که شما می فرمایید کنار هم می چینند ازش بایت درست می کنند و از آن بایت استفاده می کنند.
شما در این آدرس راهنمایی کامل به همراه سورس کد برنامه را پیدا خواهید کرد
http://www.w3.org/Graphics/PNG/RFC-1951
پس نگید که نمیشه.منظور بنده هم همین بود دیگه.
بسیار ممنون از راهنماییتون.

galaxy.ice
دوشنبه 02 بهمن 1385, 18:01 عصر
نه امکان نداره.هرفایلی هدری داره.فایل ها از block و رکورد ها تشکیل میشن . بین بلاک ها فظاهای waste وجود داره حتی در بهترین حالت ها.تو هدر فایل flag protection یا .... وجود داره.
فایل یه واحد کوچیک ذخیره سازی نیست.
field میتونه 1 بیت باشه اونم شاید!
ok?

galaxy.ice
دوشنبه 02 بهمن 1385, 18:15 عصر
یه توضح کوچولوی دیگه بگم . من در باره size واقعی فایل صحبت میکنم روی رسانه ذخیره سازی.
اون حجمی که ویندوز نشون میده واسه فایل های با فرمت مختلف فرق میکنن.

mortez maya
سه شنبه 03 بهمن 1385, 13:24 عصر
لینوکس جان خیلی ممنون از راهنماییت. موفق باشی./