C# 转换列表<;字节>;到textBox.text

C# 转换列表<;字节>;到textBox.text,c#,C#,我有一份清单声明如下: List localData=new List() 该列表包含:aa01535441434b204f564552464c4f57345c,其中从localData[2]到localData[15]我有文本堆栈溢出,我将输出到一个文本框 我找不到一个转换器来为我执行此操作,因此我使用了一个表,以这种方式进行转换: //Here i have all printable ascii chars. char[] asciiTable = {' ','!','"','#','$'

我有一份清单声明如下:

List localData=new List()

该列表包含:
aa01535441434b204f564552464c4f57345c
,其中从
localData[2]
localData[15]
我有文本
堆栈溢出
,我将输出到一个文本框

我找不到一个转换器来为我执行此操作,因此我使用了一个表,以这种方式进行转换:

//Here i have all printable ascii chars.
char[] asciiTable = {' ','!','"','#','$','%','&','\'','(',')'etc... }; 
要打印出我使用的数据:

textBox1.Clear();
for (i = 2; i < 16; i++)
{
     textBox1.Text += asciiTable[localData[i] - 32];
}
textBox1.Clear();
对于(i=2;i<16;i++)
{
textBox1.Text+=ascitable[localData[i]-32];
}
但我认为一定有更好的转换方法。注意:我使用的是Visual Studio 2015 Express桌面版


编辑:建议的副本不包括列表的使用。

存在
System.Text.Encoding
class。它有一些编码和解码文本的属性。应该有一个属性
Default
,提供默认编码(在大多数情况下足够)

有一个
GetString
方法,它采用字节数组。看

您可以对字节集合调用
ToArray
,然后将其馈送到
GetString

来自MSDN的示例

private static string ReadFromBuffer(FileStream fStream)
{
    Byte[] bytes = new Byte[MAX_BUFFER_SIZE];
    string output = String.Empty;
    Decoder decoder8 = enc8.GetDecoder();

    while (fStream.Position < fStream.Length) {
       int nBytes = fStream.Read(bytes, 0, bytes.Length);
       int nChars = decoder8.GetCharCount(bytes, 0, nBytes);
       char[] chars = new char[nChars];
       nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0);
       output += new String(chars, 0, nChars);                                                     
    }
    return output;
}
私有静态字符串ReadFromBuffer(FileStream FSSTREAM)
{
字节[]字节=新字节[最大缓冲区大小];
字符串输出=string.Empty;
解码器decoder8=enc8.GetDecoder();
while(fStream.Position
您可能需要

textBox1.Text =
    System.Text.Encoding.Default.GetString(localData.ToArray());

Encoding.Default
为您的系统提供默认的ANSI编码。不要将其与ASCII混淆,ASCII是一种7位编码。ANSI编码是8位编码,但前127个代码点与ASCII编码中的相同。

如果您确实只需要ASCII,并且只需要列表的一个子范围,则可以使用以下方法:

List<byte> localData = new List<byte> { 0xAA, 0x01, 0x53, 0x54, 0x41, 0x43, 0x4B, 0x20, 0x4F, 0x56, 0x45, 0x52, 0x46, 0x4C, 0x4F, 0x57, 0x34, 0x5C };
textBox1.Text = Encoding.ASCII.GetString(localData.GetRange(2, 14).ToArray());
List localData=新列表{0xAA、0x01、0x53、0x54、0x41、0x43、0x4B、0x20、0x4F、0x56、0x45、0x52、0x46、0x4C、0x4F、0x57、0x34、0x5C};
textBox1.Text=Encoding.ASCII.GetString(localData.GetRange(2,14.ToArray());
如果需要支持ASCII范围以外字符的转换,只需更改代码段以使用相应的
编码
属性。

使用LINQ的解决方案:

List<byte> localData = new List<byte> { 0xAA, 0x01, 0x53, 0x54, 0x41, 0x43, 0x4B, 0x20, 0x4F, 0x56, 0x45, 0x52, 0x46, 0x4C, 0x4F, 0x57, 0x34, 0x5C };

string txt = new string(localData.Where((b, index) => index >= 2 && index <= 15)
                                 .Select(b => (char)b).ToArray());

WriteLine(txt); // STACK OVERFLOW
List localData=新列表{0xAA、0x01、0x53、0x54、0x41、0x43、0x4B、0x20、0x4F、0x56、0x45、0x52、0x46、0x4C、0x4F、0x57、0x34、0x5C};
string txt=新字符串(localData.Where((b,index)=>index>=2&&index(char)b.ToArray());
WriteLine(txt);//堆栈溢出

可能存在的副本没有文本,只有编码文本。您确定编码是ASCII码吗?处理文本的代码应该非常清楚它处理的是哪种编码。(需求规范也应该如此。)它还应该明确在特殊情况下应该做什么。(替换字符,如?和� 是一种“尽力而为”的安静错误技巧,而抛出异常则是一种“要么全有要么全无”、“验证您的假设”技巧。)多亏了大家。w.b建议符合我的需要。我将参考所有的答案来学习C#,我才刚刚开始。