Создание строки из переменной byte [] (C #) - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь создать переменную или строку из "Convert.ToChar(b[i])" в следующем контексте:

    byte[] b = new byte[100];
    int k = s.Receive(b);
    Console.WriteLine("Recieved...");
    for (int i = 0; i < k; i++)
        Console.Write(Convert.ToChar(b[i]));

Например:

var str = Convert.ToChar(b[i]);

Но вышеприведенное не работает,как "i" равно not defined within the current context

Ответы [ 3 ]

4 голосов
/ 20 декабря 2011

Это просто случай, когда цикл for не имеет адекватной области видимости? Попробуйте следующее ...

byte[] b = new byte[100];
int k = s.Receive(b);
Console.WriteLine("Recieved...");
for (int i = 0; i < k; i++)
{
    Console.Write(Convert.ToChar(b[i]));
    var myVariable = Convert.ToChar(b[i]);
}

Обратите внимание, что если вы не включите фигурные скобки, цикл for будет иметь только область видимости первой строки под ним, и поэтому строка var = Convert.ToChar(b[i]); не сможет получить доступ к переменной i в цикле Объем.

Вот почему я всегда проверяю, что я вставляю фигурные скобки в код для цикла, даже если это для одной строки в цикле - таким образом легко отследить область действия цикла.

1 голос
/ 20 декабря 2011

Довольно непонятно, что вы имеете в виду, но звучит так, как будто вы могли бы захотеть:

byte[] b = new byte[100];
int k = s.Receive(b);
Console.WriteLine("Received...");
string text = Encoding.ASCII.GetString(b, 0, k);

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

1 голос
/ 20 декабря 2011

Это потому, что я существую только в цикле for.Попробуйте добавить все значения в массив, а затем получить доступ к определенному элементу из него.

В вашем случае, поскольку вы хотите создать строку в своем коде, вы можете использовать StringBuilder для ее создания.Например:

StringBuilder a = new StringBuilder();
a.Append(Convert.ToChar(b[i]);
string str = a.ToString();

или в вашем примере это будет:

byte[] b = new byte[100];
int k = s.Receive(b);
Console.WriteLine("Recieved...");
StringBuilder a = new StringBuilder();

for (int i = 0; i < k; i++)
{
    a.Append(Convert.ToChar(b[i]);
}
string str = a.ToString();
...