PDA

View Full Version : جدا کردن چند بیت اول یک مقدار 16 بیتی



sunrise255
شنبه 11 مرداد 1393, 10:07 صبح
سلام دوستان وقت بخیر؛
می خوام با استفاده از حلقه for پنج بیت اول یک فایل متنی با مقدار باینری 16 بتی رو جدا کنم و مقادیر جدا شده رو در یک فایل متنی دیگر قرار بدم.
کدی که تا حالا نوشتم به این صورته :
لطفا کمک کنید.


var rnd = new Random();
Directory.CreateDirectory("Source IP");

for (int i = 0; i < 31; i++)
{
var sw = new StreamWriter("Source IP/SRC_00000_" + (i + 1).ToString() + ".txt");
sw.Write(Convert.ToString(rnd.Next(32768, 65536), 2).ToString());
sw.Close();
}
یه سوال چطوری کپی کنم که کدها به این شکل درنیاد !!!

plus
شنبه 11 مرداد 1393, 16:14 عصر
واحد نگهداری داده در فایل byte هست، شما نمیتونید 1 بیت 1 بیت از فایل بخونید یا در اون بنویسید.در ضمن نمیتونید 5 بیت در فایل بنویسید، هر بایت 8 بیت هست.

byte first5Bits;
using (var fileStream = System.IO.File.OpenRead("path")) {
ushort firstWord;
using (var binReader = new BinaryReader(fileStream)) {
firstWord = binReader.ReadUInt16();
}
first5Bits = (byte)(firstWord & 0x001F); // 00000000 00011111
}
using (var fileStream = System.IO.File.OpenWrite("path2")) {
fileStream.WriteByte(first5Bits);
}

در این مثال با استفاده از BinaryReader، شونزده بیت اول رو در قالب یک uint16 (با روش little-endian) میخونیم و با استفاده از عملگر & فقط مقدار 5 بیت اول رو در یک byte میریزیم (بیت های 6 به بعد 0 در نظر گرفته میشن) و اون byte رو در فایل دیگه میریزیم.توجه کنید که فایل حاصل 1 بایت (هشت بیت) هست نه 5 بیت.

کدهاتون رو هم در تگ CSHARP بگذارین تا درست نمایش داده بشن. [ CSHARP ] و [ CSHARP / ] (بدون فاصله)