Официальный сайт студ.городка НГТУ
Программирование и БД » [C#] Как прочитать String побитно? 

#1  23.03.10 19:03

nnn
Профиль

[C#] Как прочитать String побитно?

Есть

Код::

String line = "блаблабла"

как прочитать ее побитно? или как преобразовать ее в BitArray и обратно?

Код::

            

            String text1 = "блаблабла";

            char[] text2 = text1.ToCharArray();

            bool[] text = new bool[text2.Length * 8];

            for (int i = 0; i < text2.Length; i++)
            {
                    new BitArray(new byte[] {(byte)text2[i++]}).CopyTo(text, i * 8);
            }

но это уж как то сильно неэффективно...есть ли варианты по проще?

Offline

#2  23.03.10 19:14

$up
Профиль

Re: [C#] Как прочитать String побитно?

то что ты написал, очень странно, т.к. char это два байта, а ты из двух один делаешь 8)
не, что-то не то, каждая буква это 16 бит

Исправлено $up (23.03.10 19:26)

Offline

#3  23.03.10 19:58

nnn
Профиль

Re: [C#] Как прочитать String побитно?

$up,  ну тем более значит неправильно я делаю...это в общем не сложно исправить...но не в этом дело...мне интересно нет ли способа попроще чем такие извращения?

Исправлено nnn (23.03.10 19:59)

Offline

#4  23.03.10 21:59

Re: [C#] Как прочитать String побитно?

nnn написал(а):

как прочитать ее побитно?

Код: C#:

String s = Convert.ToString(text1[0], 2); // так не канает??

nnn написал(а):

как преобразовать ее в BitArray

Код: C#:

 public static byte[] StrToByteArray(string str)
        {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            return encoding.GetBytes(str);
        }
 String text1 = "блаблабла";
 BitArray ba = new BitArray(StrToByteArray(text1));

nnn написал(а):

и обратно?

а хз...
а вообще, уточни задачу... потому как класс для работы с битами не один (BtConverter, BtVector32)

Offline

#5  24.03.10 11:52

nnn
Профиль

Re: [C#] Как прочитать String побитно?

Если уточнить задачу то мне надо:

1)прочесть текст из файла
2)преобразовать его в соответствии с алгоритмом шифрования ГОСТ сколько то сколько то(разбить на блоки по 64 бит и перемешать)
3)получить то что получилось в формате string
4)записать это в другой файл

все сделать могу, кроме как разбить его на блоки по 64 бит.

примерно так...

Offline

#6  24.03.10 13:59

$up
Профиль

Re: [C#] Как прочитать String побитно?

nnn написал(а):

как разбить его на блоки по 64 бит

в данном случае имееется ввиду размерность. Не нужно понимать это буквально.
64 бит это переменная типа long
результат выводится обычно в строку в hex формате.

обычно криптографические алгоритмы работают с массивом байтов
e.g.

Код::

           byte[] buffer1 = new byte[] { 0xaa, 0xbb, 0xcc, 0xdd };
            string text1 = null;
            byte[] buffer2 = ConvertStringToByteArray(strText);
            byte[] buffer3 = ProtectedData.Protect(buffer2, buffer1, DataProtectionScope.LocalMachine);
            text1 = ConvertByteArrayToHexPairs(buffer3);
            return text1;

Offline

#7  24.03.10 15:23

nnn
Профиль

Re: [C#] Как прочитать String побитно?

$up написал(а):

byte[] buffer3 = ProtectedData.Protect(buffer2, buffer1, DataProtectionScope.LocalMachine);

мне надо именно реализовать этот алгоритм а не пользоваться чем-то готовым.

$up написал(а):

обычно криптографические алгоритмы работают с массивом байтов

а как мне для двух элементов типа байт выполнить xor?

Offline

#8  24.03.10 15:35

$up
Профиль

Re: [C#] Как прочитать String побитно?

nnn написал(а):

а как мне для двух элементов типа байт выполнить xor?

а в чём проблема? a ^= b;

Offline

#9  24.03.10 16:28

nnn
Профиль

Re: [C#] Как прочитать String побитно?

$up, прошу прощения действительно протупил что-то я...

(int)~set::Get();, с твоей помощью написал функции конвертирования....

Код::

        private static String BitArrayToStr(BitArray ba)
        {
            byte[] strArr = new byte[ba.Length / 8];

            System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

            for(int i = 0; i < ba.Length/8; i++)
            {
                for (int index = i * 8, m = 1; index < i * 8 + 8; index++, m *= 2)
                {
                    strArr[i] += ba.Get(index) ? (byte)m : (byte)0;
                }
            }

            return encoding.GetString(strArr);
        }

        private static BitArray StrToBitArray(String str)
        {
            System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
            return new BitArray(encoding.GetBytes(str));            
        }

но похоже они не пригодятся...хотя посмотрю как удобнее будет сделать...спасибо ребята за помощь...

Offline

Программирование и БД » [C#] Как прочитать String побитно? 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.036 сек.
Выполнено 14 запросов.