Самое простое - взять каждую цифру и рассматривать ее как бит.Каждая группа из 8 битов может храниться в байте.Затем вы можете отправить его в виде потока байтов.Вам также нужно будет сохранить длину исходной строки, чтобы вы могли различать «0» и «00».
Вот один способ, которым вы можете написать преобразование из строки в байтовый массив:
byte[] convertToBytes(string s)
{
byte[] result = new byte[(s.Length + 7) / 8];
int i = 0;
int j = 0;
foreach (char c in s)
{
result[i] <<= 1;
if (c == '1')
result[i] |= 1;
j++;
if (j == 8)
{
i++;
j = 0;
}
}
return result;
}
Обратная операция очень похожа.
Если вам нужно передать данные в виде строки, вы можете base 64 кодировать результирующий байтовый массив.
Возможно, вы также захотите сохранить это в этой форме в памяти тоже.Это будет гораздо эффективнее, чем хранить его в виде строки, где каждая цифра хранится в виде 2-байтового символа.Вы используете примерно в 16 раз больше памяти, чем нужно для хранения ваших данных.Недостаток заключается в том, что использовать его в этой форме немного сложнее, поэтому, если у вас достаточно памяти, то то, что вы в данный момент делаете, может быть просто отлично.