Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 17:56   #1
Барбарис
 
Регистрация: 12.01.2010
Сообщений: 7
По умолчанию Перевод массива битов в байт

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

PHP код:
1;
            
0;
            
FileStream fs = new FileStream("1.dat"FileMode.OpenFileAccess.Read);
            
BinaryReader r = new BinaryReader(fs);
            
Test = new Byte[16];  //допустим всего 16 байт информации в файле в который будем зашифровывать
            
Test r.ReadBytes(16); //читаем их
            
r.BaseStream.Seek(00); //смещаемся на начало
            
Shifr r.ReadBytes(1);  //допустим кодируем в 16 байтах один свой байт (берем его произвольно)
            
r.Close();
            
fs.Close();
            
BitArray bt1 = new BitArray(Shifr); //разбиваем на биты байт который будем зашифровывать
            
FileStream fs1 = new FileStream("2.dat"FileMode.OpenOrCreateFileAccess.ReadWrite);
            
BinaryWriter w = new BinaryWriter(fs1);
            for (
int j 0<= 7j++)
            {
                
BitArray bt = new BitArray(Test[k]); //берем 8 бит из четного байта
                
bt.Set(8bt1[n]); // заменяем 8-ой бит на бит из Shifr
               // тут нужно bt засунуть в Test[j + k] вопрос как?
                
w.BaseStream.WriteByte(Test[k]); //записываем байт с измененным 8-м битом в файл
                
1;
                
1;
            } 
Нашел bt.CopyTo(Test[j + k],0); но данный метод выдает ошибку
Барбарис вне форума Ответить с цитированием
Старый 24.02.2010, 18:11   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Попробуй этот алгоритм:
Код:
public static byte[] ToByteArray(this BitArray bits) {
    int numBytes = bits.Count / 8;
    if (bits.Count % 8 != 0) numBytes++;

    byte[] bytes = new byte[numBytes];
    int byteIndex = 0, bitIndex = 0;

    for (int i = 0; i < bits.Count; i++) {
        if (bits[i])
            bytes[byteIndex] |= (byte)(1 << (7 - bitIndex));

        bitIndex++;
        if (bitIndex == 8) {
            bitIndex = 0;
            byteIndex++;
        }
    }

    return bytes;
}
Hollander вне форума Ответить с цитированием
Старый 24.02.2010, 18:20   #3
Барбарис
 
Регистрация: 12.01.2010
Сообщений: 7
По умолчанию

Извиняюсь, конечно, за глупый вопрос, но куда именно вставить данную конструкцию? Выскакивает ошибка с указанием на MainForm в
Код:
public partial class MainForm : Form
Я новичок в с#. Может просто что-то не так делаю?
Барбарис вне форума Ответить с цитированием
Старый 25.02.2010, 00:17   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

консольное прилоежение или виндовс форм? Вам как пример дали функцию.. ее можно практически хоть куда засунуть... и к ней обращаться..
dampirik вне форума Ответить с цитированием
Старый 25.02.2010, 16:15   #5
Барбарис
 
Регистрация: 12.01.2010
Сообщений: 7
По умолчанию

Нашел процедуру покороче.

PHP код:
public static void SetBit(ref byte bint posbool val)
{
    
|= (byte)((val 0) << pos);
}
...
SetBit(ref Test[k], 7bt1[n]); 
Все работает.
Барбарис вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск байт Gerzs Общие вопросы Delphi 9 06.11.2009 17:28
Инлайн ассемблер. считывание битов!!! Hacker19_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 17.03.2009 19:58
Задача с заменой битов. Нужна помощь! Solma Фриланс 9 07.12.2008 22:48
извлечение битов из байтов... WinApi Помощь студентам 4 10.11.2008 15:14
Перестановка битов. RegentM Общие вопросы Delphi 3 05.11.2007 17:23