View Full Version : تغییر مستقیم بیت های یک آرایه از بایت و ذخیره آن
hamedsalar
چهارشنبه 13 آذر 1392, 17:27 عصر
ضمن عرض سلام و خسته نباشید خدمت دوستان و برادران عزیزم
می خواستم بدونم در C# چطوری میشه بیت های یک بایت را به صورت مستقیم دستکاری کرد.
fmehrvarzi
چهارشنبه 13 آذر 1392, 18:05 عصر
تغییرات byte بین 0 تا 255 می باشد
اگر خواستید بیت خواسی را تغییر بدهید
کافیه عدد مورد نظر آنرا تغییر دهید
byte b = 45;
hamedsalar
چهارشنبه 13 آذر 1392, 18:41 عصر
خوب آقا از اینکه جواب دادید ازتون ممنونم
ولی منظور من اینه که مثلاً شما چند بایت از اطلاعات یک فایل رو می خونید و بعد می خواهید چند بیت از هر بایت رو به نحو دلخواهی دست بزنید و بعد اون رو دوباره در فایل ذخیره کنید...
چکار باید کرد؟
fmehrvarzi
چهارشنبه 13 آذر 1392, 18:44 عصر
میتونی از این دستورها برای تغییر بیت خاصی استفاده کنی
byte b = 45;
//Will be "101101"
var bitstring = Convert.ToString(b, 2);
byte c = Convert.ToByte("101101");
hamedsalar
چهارشنبه 13 آذر 1392, 19:06 عصر
خوب اقا از اینکه پیگیری باز هم ممنونم
این کد رو ببین
private void save_Btn_Click(object sender, EventArgs e)
{
BitArray bits = new BitArray(8);
FileStream fileReader = new FileStream(openFileDialogFileHolder.FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
Int32 size = Convert.ToInt32(fileReader.Length);
byte[] byteFile = new byte[size];
fileReader.Read(byteFile, 0, size);
foreach (Byte B in byteFile2)
{
BitArray myBA2 = new BitArray(BitConverter.GetBytes(B).ToArray());
myBA[1] = myBA2[5];
myBA2[3] =true;myBA2[2] =false;myBA2[1] =false;
byteFile[index] = (BitArrayToByteArray(myBA));
{
FileStream write = new FileStream(saveFileDialogCombinedFile.FileName, FileMode.Create, FileAccess.Write);
BinaryWriter bin = new BinaryWriter(write);
bin.Write(byteFile);
}
public byte[] BitArrayToByteArray(BitArray ba)
{
byte[] bytes;
if (ba.Length % 8 == 0)
{
bytes = new byte[ba.Length / 8];
}
else
{
bytes = new byte[ba.Length / 8 + 1];
}
for (int i = 0; i < ba.Length; i += 8)
{
int pos = i / 8;
for (int j = 0; j < 8; j++)
{
if (i + j < ba.Length)
{
if (ba[i + j] == true)
{
bytes[pos] &= 1;
}
}
bytes[pos] <<= 1;
}
}
return bytes;
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.