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#,我才刚刚开始。