PDA

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



Trinitro
دوشنبه 07 بهمن 1387, 04:57 صبح
سلام
من الگوریتم هافمن را در سی پیاده کردم, ولی حجم فایل فشرده شده از فایل اصلی بیشتر میشه.
برای اینکه با این حال که من فایل خروجی را باینری باز می کنم wb, ولی باز هم اعداد 0 و 1 را به صورت کاراکتر سیو می کنه.
می خواستم اگه میشه راهنمایی کنید چه طور می تونم باینری در فایل بنویسم؟
ممنون

Saeed_m_Farid
دوشنبه 07 بهمن 1387, 09:27 صبح
سلام
من الگوریتم هافمن را در سی پیاده کردم, ولی حجم فایل فشرده شده از فایل اصلی بیشتر میشه.
برای اینکه با این حال که من فایل خروجی را باینری باز می کنم wb, ولی باز هم اعداد 0 و 1 را به صورت کاراکتر سیو می کنه.
می خواستم اگه میشه راهنمایی کنید چه طور می تونم باینری در فایل بنویسم؟
ممنون
اگه اون تکه کدی که داره تو فایل مینویسه رو بذارین بهتر میشه راهنمایی کرد ولی بطور کلی از نظر نوشتن مهم نیست که فایل رو چطوری باز میکنید، احتمالا نحوه نوشتن شما تو فایل اشتباهه : شاید دارین با fprintf تو فایل مینویسین ولی باید بعد اینکه یه بافر واسه نوشتن تو فایل آماده شد با تابع fwrite که بافر و اندازه اش و همچنین تعداد تکرار رو از شما میگیره، عمل نوشتن تو فابل رو انجام بدین؛ البته اگه بیشتر در مورد برنامتون توضیح بدین بهتر میشه راهنمایی کرد، درنهایت کد زیر امیدوارم بتونه راهنمایی تون کنه :


#include <stdio.h>
struct mystruct
{
int i;
char ch;
};
int main(void)
{
FILE *stream;
struct mystruct s;
if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
s.i = 0;
s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* write struct s to file */
fclose(stream); /* close file */
return 0;
}

Nima_NF
دوشنبه 07 بهمن 1387, 16:25 عصر
شما باید تمامی بیت ها را تک تک در کنار هم قرار دهید (با OR) و یک بایت درست کنید (8 بیت) و سپس آن را دخیره کنید. به این شکل هر عدد صفر یا یک فقط در یک خانه قرار می گیرد.

سال قبل به طور کامل در این باره بحث شد و به طور کامل با چند مثال موضوع را توضیح دادم (مخصوصا صفحات 2 و 3 پست های من):
چطوری میشه bit به bit توی یه فایل خروجی نوشت؟ (http://barnamenevis.org/forum/showthread.php?t=89487)

تذکر: پیدا کردن تاپیک فوق بیش از 10 دقیقه طول کشید پس لطفا مثال ها ذکر شده در آن را به طور کامل مطالعه کنید تا متوجه موضوع شوید.