Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод массива битов в байт 
:(
    Опции темы
hairbaton
Дата 24.2.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.3.2009

Репутация: нет
Всего: нет



Занимаюсь шифрованием текста при помощи метода замены младшего бита. Читаю байты из файла, затем в каждом четном байте заменяю 8-ой бит на свой и я должен записать этот измененный байт в файл. Вопрос в том, как мне измененный массив бит запихать в нужный байт?

Код

            k = 1;
            n = 0;
            FileStream fs = new FileStream("1.dat", FileMode.Open, FileAccess.Read);
            BinaryReader r = new BinaryReader(fs);
            Test = new Byte[16];  //допустим всего 16 байт информации в файле в который будем зашифровывать
            Test = r.ReadBytes(16); //читаем их
            r.BaseStream.Seek(0, 0); //смещаемся на начало
            Shifr = r.ReadBytes(1);  //допустим кодируем в 16 байтах один свой байт (берем его произвольно)
            r.Close();
            fs.Close();
            BitArray bt1 = new BitArray(Shifr); //разбиваем на биты байт который будем зашифровывать
            FileStream fs1 = new FileStream("2.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            BinaryWriter w = new BinaryWriter(fs1);
            for (int j = 0; j <= 7; j++)
            {
                BitArray bt = new BitArray(Test[j + k]); //берем 8 бит из четного байта
                bt.Set(8, bt1[n]); // заменяем 8-ой бит на бит из Shifr

               // тут нужно bt засунуть в Test[j + k] вопрос как?

                w.BaseStream.WriteByte(Test[j + k]); //записываем байт с измененным 8-м битом в файл
                k = k + 1;
                n = n + 1;
            }


Нашел bt.CopyTo(Test[j + k],0); но данный метод выдает ошибку

Это сообщение отредактировал(а) hairbaton - 24.2.2010, 17:46
PM MAIL   Вверх
KelTron
Дата 24.2.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Код

public static void SetBit(ref byte b, int pos, bool val)
{
    b |= (byte)((val ? 1 : 0) << pos);
}

...
SetBit(ref Test[j + k], 7, bt1[n]);



Это сообщение отредактировал(а) KelTron - 24.2.2010, 20:43


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Jade
Дата 24.2.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.10.2006
Где: Киев

Репутация: нет
Всего: нет



битэррей можно в стринг
а из стринга в byte[] есть:

byte[] byteArray = new byte[100];

byteArray[i] = Convert.ToByte(string, 2);
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0711 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.