PDA

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



alaaaa
دوشنبه 27 آبان 1387, 18:37 عصر
سلام به همگی

من باید برنامه برای کد گذاری به روش هافمن بنویسم
همه کارها شو حل کردم ولی موندم چطور بیت به بیت در فایل بنویسم

البته روش تبدیل بیتها به int و نوشتن int در فایل هم جواب نمی ده چون ممکنه در آخر کار کمتر از 8 بیت بمونه

از کمکتون متشکرم

saeedIRHA
چهارشنبه 29 آبان 1387, 15:46 عصر
از Shift Operation استفاده کن
اگر بلد نيستی بگو توضيح بدم

alaaaa
یک شنبه 03 آذر 1387, 19:18 عصر
اگه توضیح بدین ممنون می شم

pvza85
سه شنبه 05 آذر 1387, 16:34 عصر
یعنی چی Shift Operation رو بلد نیستی؟:لبخند:
همون >> و ... هستش دیگه. برا اطلاعات بیشتر اینجا (http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html) رو ببین فکر کنم روشی که دوستمون می گه اینه که بوسیله Bitwise Operationها بیت ها رو به صورت یک byte تو فایل ذخیره کنی. یعنی هر بیت رو تو یه بایت بستگی به اینکه این بیت چندم هستش ذخیره کنی مثلا برای ذخیره بیت 3 ام مقدار این بیت رو وارد بایت بکن و 3 تا شیفت بده و بعد این 8 بایت رو با هم and کنی.
یا 8 تا بیت رو تک تک وارد یه بایت بکن و قبل از اینکه هر بیت رو وارد بکنی بایت رو یه دونه شیفت به چپ بده و بایت نتیجه رو تو فایل بنویسی ولی مشکل اینه که اگه تعداد بیت هات مضرب 8 نباشه باید راهکاری واسه این کار در نظر بگیری مثلا تعداد بیت هات رو تو اول فایل ذخیره کنی یا یه flag (ترکیب خاصی از بیت ها برای نشون دادم آخر فایل) استفاده کنی که هر کدوم ایرادای خودشونو دارن.
اینجا رو هم ببین:
http://archive.devx.com/java/free/articles/gt052002/gt052002-1.asp
شرمنده که خوب توضیح ندادم:قلب::قلب:

saeedIRHA
سه شنبه 05 آذر 1387, 21:33 عصر
اين مثال Bitwise and Bit Shift Operators رو ببين، فک نميکنم احتياج به توضيح داشته باشه:


/*
* Shifts operations
*/
public class ShiftOperations
{
protected final static int m_value = 0xAABBCCDD;
public static void main(String [] argv)
{
System.out.printf("Value in Hex: 0x%x\n", m_value);
byte a = (byte)((m_value >>24) & 0xFF);
byte b = (byte)((m_value & 0x00FF0000) >> 16);
byte c= (byte)((m_value & 0x0000FF00) >> 8);
byte d= (byte)((m_value & 0x000000FF));

System.out.printf("Value shifted 24 bits & 0xFF is: 0x%x\n" +
"Value & 0x00FF0000 shitf 16 bits is: 0x%x\n" +
"Value & 0x0000FF00 shitf 8 bits is: 0x%x\n" +
"Value & 0x000000FF is: 0x%x\n", a,b,c,d);

}
}