Página 1 de 1

C# Converter List<byte> em ASCII

MensagemEnviado: 29 Ago 2015 22:47
por KrafT
Então...

Tenho uma lista de bytes do tipo:

Código: Selecionar todos
List<byte> localData = new List<byte>();


Essa List carrega um texto que quero colocar numa textBox. Por ridículo que pareça, esse humilde programador de C# de fim de semana não consegue extrair um '0x41' da List e jogar no textBox como 'A'. :oops:

Re: Converter List<byte> em ASCII

MensagemEnviado: 29 Ago 2015 22:50
por KrafT
Se em vez de querer o ASCII, eu quisesse o hexa, seria fácil:
Código: Selecionar todos
 Convert.ToString(localData[posicao], 16);

Re: Converter List<byte> em ASCII

MensagemEnviado: 29 Ago 2015 23:32
por Djalma Toledo Rodrigues
Hex + 30h = ASCII

Ver Tabela ASCII

Dj.

Re: Converter List<byte> em ASCII

MensagemEnviado: 29 Ago 2015 23:37
por KrafT
Well, resolvi da pior forma possível...

Código: Selecionar todos
          char[] letras = {' ','!','"','#','$','%','&','\'','(',')','*','+','\'','.... etc (toda a tabela ASCII)

          textBox1.Text = " ";
          for (temp = 6; temp < 26; temp++) //Posição do texto dentro de locaData.
          {
              textBox1 += letras[localData[temp]-32];
          }


'Um dia' encontro uma forma bonita de fazer isso.

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 00:11
por Red Neck Guy
Código: Selecionar todos

String res="";
for(int i=0;i<lista.count;i++)
  res+= (char)Convert.toString(lista[i]); + ",";

// não lembro se é count ou length que tem a quantidade de items na lista
// pra converter pra hex tem um overload da função toString que aceita os parametros da base alvo



Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 09:57
por KrafT
Aquino escreveu:
Código: Selecionar todos

String res="";
for(int i=0;i<lista.count;i++)
  res+= (char)Convert.toString(lista[i]); + ",";

// não lembro se é count ou length que tem a quantidade de items na lista
// pra converter pra hex tem um overload da função toString que aceita os parametros da base alvo




Nop...

O meu problema é que a origem dos dados é uma List<byte>. Não achei parsers e converters que aceitem isso e retornem ASCII. :?

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 10:47
por Red Neck Guy
Talvez eu não tenha codificado de forma clara, segue o código:
Código: Selecionar todos
 
      private void button1_Click(object sender, EventArgs e)
        {
            List<byte> lista = new List<byte>();

            for (int i = 0; i < 10; i++)
                lista.Add((byte)(0x41 + i));

            String res = "";
            foreach (byte b in lista)
            {
                res += (char)b;
            }

            textBox1.Text = res;
        }

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 10:48
por Red Neck Guy
Então, aquela lista que populei antes do foreach é igual a que tu tens?
Dentro dela não existem caracteres de controle, certo?

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 10:53
por Red Neck Guy
No caso de tu querer converter para hexadecimal:
Código: Selecionar todos
        private void button1_Click(object sender, EventArgs e)
        {
            List<byte> lista = new List<byte>();

            for (int i = 0; i < 10; i++)
                lista.Add((byte)(0x41 + i));

            String res = "";
            foreach (byte b in lista)
            {
                res += String.Format("0x{0:X},", b);
            }

            textBox1.Text = res;
        }

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 10:54
por Red Neck Guy
No caso de querer converter para decimal:
Código: Selecionar todos
        private void button1_Click(object sender, EventArgs e)
        {
            List<byte> lista = new List<byte>();

            for (int i = 0; i < 10; i++)
                lista.Add((byte)(0x41 + i));

            String res = "";
            foreach (byte b in lista)
            {
                res += "[" + b.ToString() + "],";
            }

            textBox1.Text = res;
        }

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 30 Ago 2015 11:49
por KrafT
Obrigado Aquino.

Sugestão do fórum Stack Overflow:
Código: Selecionar todos
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


Conclusão: C# é uma linguagem satânica, ainda mais para que sem criou no Clipper Summer 87, dormindo em cima dos livros do Ramalho.

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 31 Ago 2015 08:19
por xultz
Não sei se é teu caso aí, mas tem lembrar que no C# variáveis de caractere tem 2 bytes e não usam a tabela ASCII, mas UTF-8.

Re: C# Converter List<byte> em ASCII

MensagemEnviado: 31 Ago 2015 09:09
por KrafT
xultz escreveu:Não sei se é teu caso aí, mas tem lembrar que no C# variáveis de caractere tem 2 bytes e não usam a tabela ASCII, mas UTF-8.


Então, aprendi isso (esse tal de UTF-8) e o que é LINQ numa única thread do Stackoverflow.

Como eu uso C# só por hobby, tá tranquilo dizer que eu sei o que é, mas (ainda) não sei como usa, hehe... 8) 8) 8)