从byte []变量(C#)创建一个字符串

时间:2011-12-20 12:43:28

标签: c# .net windows string

我正在尝试在以下上下文中创建一个来自“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]));

E.g:

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

但上述内容不起作用,因为“i”为not defined within the current context

3 个答案:

答案 0 :(得分:4)

仅仅是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 :(得分:1)

那是因为我只存在于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();

答案 2 :(得分:1)

目前还不清楚你的意思,但听起来你可能想要:

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

请注意,ASCII不是唯一可能的编码 - 使用正确的编码将取决于您使用的协议所指示的。