Изменение битов - C#
Формулировка задачи:
Я бы хотел узнать, можно ли в C# как нибудь поменять биты в байте например? я хочу попробовать написать крипт систему на основе замены некоторых битов, например с 0 на 1 и наоборот, но не всех, а только например 1-го и 5-го
Решение задачи: «Изменение битов»
textual
Листинг программы
static void Main(string[] args)
{
Random r = new Random();
int k = r.Next(0, 255);
//исходный байт
byte b = Convert.ToByte(k);
int bi = Convert.ToInt32(b);
string hex = Convert.ToString(b, 2);
string num = hex;
while (num.Length < 8)
{
num = "0" + num;
}
Console.WriteLine("Исходный байт");
Console.WriteLine(Convert.ToString(b));
Console.WriteLine(num);
char[] CH = new char[8];
int index = CH.Length - hex.Length;
hex.CopyTo(0, CH, index, hex.Length);
//заменяем нули на единици и наоборот в 1 и 5 битах
if (CH[7] == '1')
bi = bi - 1;//отнимаем вес первого бита
else
bi = bi + 1;//прибавляем вес первого бита
if (CH[2] == '1')
bi = bi - 32;//отнимаем вес пятого бита
else
bi = bi + 32;//прибавляем вес пятого бита
//РЕЗУЛЬТАТ
byte output = Convert.ToByte(bi);
string outp = Convert.ToString(output, 2);
while (outp.Length < 8)
{
outp = "0" + outp;
}
Console.WriteLine("Байт после замены 1 и 5 битов");
Console.WriteLine(Convert.ToString(output));
Console.WriteLine(outp);
Console.ReadKey();
}