хранить байтовые значения в строке? преобразовать байт в строку? - PullRequest
0 голосов
/ 18 марта 2012

если я получаю 8 битов из источника и помещаю эти 8 битов в байт, как я могу сохранить этот байт? каждый байт является частью сообщения (которое когда-то было строкой). Я не знаю, сколько байтов у меня получится - следовательно, использование байтового массива на самом деле не вариант. Могу ли я сохранить его в строку? Я хочу иметь возможность собрать строку после того, как получу все байты, как бы я это сделал?

, используя метод ниже, чтобы преобразовать 8 бит в байт.

 public byte GetByte(BitArray array){
        Byte byt = 0;
        for (int i = 7; i >= 0; i--){
            byt = (byte)((byt << 1) | (array[i] ? 1 : 0));
        }
        return byt;
    }

я могу позвонить, сделав это ...

 byte valueInByte = GetByte(bitsOfMessage);

Я думал, что смогу сделать это ...

 bytesOfTheMessage += (valueInByte.ToString() + "+");  //bytesOfTheMessage is a string

но тогда ... у меня есть куча байтовых значений в строке ... мне нужно извлечь и преобразовать, но во что я конвертирую. Самое первое значение, которое я получаю, - это «138», которое должно быть числом 2 - при преобразовании обратно в исходную форму. я могу сказать, что все правильные значения находятся внутри строки, так как есть шаблон, и это согласуется с исходной строкой, которую я преобразовал в биты ... есть идеи о том, что я должен делать?

Ответы [ 3 ]

2 голосов
/ 18 марта 2012

Почему бы вам не использовать List<byte>?Он будет расти динамически по мере добавления байтов.Затем вы можете декодировать его в строку.

1 голос
/ 18 марта 2012

Что ж, если вы хотите / должны поместить их в строку (хотя это может быть не самый эффективный способ хранения ваших данных, если вы действительно просто используете их в качестве хранилища), вы можете сделать что-то подобное:

Например, этот бит кода выведет символ «а» (у кого ASCII-код равен 97 в десятичном виде. Обратите внимание, что любое значение выше 127 отображается как «?»)

        char[] ac = { (char)(byte)97 };
        string s = new String(ac);
        Console.WriteLine(s);

Пример готовой к компиляции программы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ByteTest
{
class Program
{
    static void Main(string[] args)
    {
        char[] ac = { (char)(byte)97 }; //converts it to a character
        string s = new String(ac); //converts it to a string
        Console.WriteLine(s); //writes 'a'
        Thread.Sleep(10000); //displays the 'a' for 10 seconds, then finishes executing
    }
}
}

Для вашей конкретной ситуации вы можете изменить ее следующим образом

 string Message = "";
 ...
 char[] ac = { (char)valueInByte };
 string s = new String(as);
 Message += s;
0 голосов
/ 18 марта 2012

MemoryStream - другой возможный контейнер,

http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx

Вы можете использовать его метод WriteByte для накопления байтов.

...