从byte[]变量创建字符串(c#)

本文关键字:字符串 创建 变量 byte | 更新日期: 2023-09-27 18:18:18

我试图在以下上下文中从" 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

从byte[]变量创建字符串(c#)

这只是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变量。

这就是为什么我总是确保在循环代码中加上花括号的原因,即使它是在循环中的单行-这样很容易跟踪循环的范围

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

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

请注意,ASCII不是这里唯一可能的编码-正确使用的编码将取决于您使用的协议规定。

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