#1 23.03.10 19:03
[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
#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
Re: [C#] Как прочитать String побитно?
Если уточнить задачу то мне надо:
1)прочесть текст из файла
2)преобразовать его в соответствии с алгоритмом шифрования ГОСТ сколько то сколько то(разбить на блоки по 64 бит и перемешать)
3)получить то что получилось в формате string
4)записать это в другой файл
все сделать могу, кроме как разбить его на блоки по 64 бит.
примерно так...
Offline
#6 24.03.10 13:59
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
Re: [C#] Как прочитать String побитно?
$up написал(а):
byte[] buffer3 = ProtectedData.Protect(buffer2, buffer1, DataProtectionScope.LocalMachine);
мне надо именно реализовать этот алгоритм а не пользоваться чем-то готовым.
$up написал(а):
обычно криптографические алгоритмы работают с массивом байтов
а как мне для двух элементов типа байт выполнить xor?
Offline
#9 24.03.10 16:28
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

