ورود

View Full Version : سوال: خواندن فایل بصورت بیتی , چگونه؟



hamidhws
سه شنبه 11 خرداد 1389, 03:13 صبح
با سلام خدمت شما دوستان گرامی

سوال بنده اینه که چطوری میشه بیت های موجود در یک فایل (هر فایلی ) رو خوند

منظورم از بیت همون صفر و یک هست (جسارت نشه)


اگه دستوری در وی بی برای اینکار هست ممنون میشم بگید

فرضا دستوری باشه که 10 تا بیت از اول فلان فایل رو بخوای و اینو بهت بده = 1110100101

و طول فایل (چند بیت هست)


امیدوارم منظورمو واضح بیان کرده باشم

منتظر نظراتتون هستم دوستان عزیز

و در آخر هم اگه وقت شد طرز نوشتن در فایل رو هم بفرمایید اما اولویتم همون خوندنه

بازم ممنون از همگی

xxxxx_xxxxx
سه شنبه 11 خرداد 1389, 03:37 صبح
سلام،

سوال بنده اینه که چطوری میشه بیت های موجود در یک فایل (هر فایلی ) رو خوند
منظورم از بیت همون صفر و یک هست (جسارت نشه)
اگه دستوری در وی بی برای اینکار هست ممنون میشم بگید
فرضا دستوری باشه که 10 تا بیت از اول فلان فایل رو بخوای و اینو بهت بده = 1110100101

کوچکترین واحد ذخیره سازی بایت هست. برای خواندن فایل به این شکل که می فرمایید، باید محتویات فایل رو با دستورات عادی Open باز کنید و کاراکترهای اونو به بیت تبدیل کنید.


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

hamidhws
جمعه 14 خرداد 1389, 01:52 صبح
ابتدا از پاسخ گویی شما دوست عزیز و انشاالله دوستان عزیز متشکرم

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

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

لطفا ساده ترین و سریع ترین راه رو بفرمایید


مثال:
بایت=64 (0...255)
بیت= 00000010

اگه لطف کنید تکه کدی بفرمایید که مثل مثال بالا کد اسکی بایت را بگیرد (0...255) و در 8 بیت برگشت دهد (فقط 8 بیت)

ممنونم

xxxxx_xxxxx
جمعه 14 خرداد 1389, 02:47 صبح
سلام،

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



مثال:
بایت=64 (0...255)
بیت= 00000010


Dim Dec As Byte, bit As Boolean, Result As String
Dec = 64
Do While Dec > 0
bit = Dec Mod 2
Dec = Dec \ 2
Result = IIf(bit = True, "1", "0") + Result
Loop
MsgBox Format(Result, "00000000")
موفق باشید/

hamidhws
جمعه 14 خرداد 1389, 03:04 صبح
اول از همه خیلی خیلی ممنونم از پاسخگویی شما دوست عزیزم

فقط 1 چیزی بیتی که آخر میده چطور میشه از چپ به راستش کرد؟ الان 64 رو میده 0100000 که باید بشه 0000010 ؟



بازم خیلی خیلی ممنونم از پاسخ سریع و خوبتون

یه دنیا ممنون دوست گلم

xxxxx_xxxxx
جمعه 14 خرداد 1389, 03:47 صبح
خواهش می کنم
خروجی که اون قطعه کد به شما میده درست هست، درواقع در مبنای باینری بیت های کم ارزش سمت راست، و بیت های پر ارزش سمت چپ قرار می گیرند.

به هر حال اگر میخواید خروجی برعکس نمایش داده بشه:


Dim Dec As Byte, bit As Boolean, Result As String
Dec = 64
Do While Dec > 0
bit = Dec Mod 2
Dec = Dec \ 2
Result = Result + IIf(bit = True, "1", "0")
Loop
Dim Zero As String
Zero = "00000000"
Result = Result & Left(Zero, 8 - Len(Result))
MsgBox Result

butterfly8528
شنبه 15 خرداد 1389, 01:37 صبح
سلام به hamidhws عزیز و استاد گرامی xxxxx_xxxxx .

برای بر عکس کردن یک رشته راه کوتاه تری وجود داره ، که استفاده از تابع داخلی StrReverse است .


MsgBox StrReverse("0100000")

موفق و پیروز باشید.

soorena
سه شنبه 26 مرداد 1389, 00:44 صبح
سلام عرض ميکنم خدمت همه دوستان
برنامه اي که برای خوندن بيت ارائه دادين کاملاً درست هستش ولی خوب راه های خيلی بهتر و سريع تری هستش تا انجام تقسيم و باقيمانده.
مثلاً يکی از راه های سريع تر به اين صورت هستش که براتون مينويسم :



unsigned char bit;
unsigned char a=0xff;
int i=0;
while(i<7)
{
bit=a>>i;
bit=bit|0x01;
cout<<bit<<" ";
i++;
}

اين کد بيت ها رو از کم ارزش به پر ارزش چاپ ميکنه و از سرعت خوبی هم برخورداره.
راستی من يه کتابخونه به زبونه cpp نوشتم که مخسوس همين کار هستش يعنی خوندن و نوشتن به صورت بيت که ميتونيد ازش استفاده کنيد اينم ادرسش :
اين کد بيت ها رو از کم ارزش به پر ارزش چاپ ميکنه و از سرعت خوبی هم برخورداره.
راستی من يه کتابخونه به زبونه cpp نوشتم که مخصوص همين کار هستش يعنی خوندن و نوشتن به صورت بيت که ميتونيد ازش استفاده کنيد اينم ادرسش :
http://www.maroofi.persiangig.com/bitio/bitio.html