PDA

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;
}