C# Converter List<byte> em ASCII

Programação C em geral

Moderadores: 51, guest2003

C# Converter List<byte> em ASCII

Mensagempor KrafT » 29 Ago 2015 22:47

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:
Editado pela última vez por KrafT em 29 Ago 2015 23:38, em um total de 1 vez.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Converter List<byte> em ASCII

Mensagempor KrafT » 29 Ago 2015 22:50

Se em vez de querer o ASCII, eu quisesse o hexa, seria fácil:
Código: Selecionar todos
 Convert.ToString(localData[posicao], 16);
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Converter List<byte> em ASCII

Mensagempor Djalma Toledo Rodrigues » 29 Ago 2015 23:32

Hex + 30h = ASCII

Ver Tabela ASCII

Dj.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Re: Converter List<byte> em ASCII

Mensagempor KrafT » 29 Ago 2015 23:37

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.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: C# Converter List<byte> em ASCII

Mensagempor Red Neck Guy » 30 Ago 2015 00:11

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


ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: C# Converter List<byte> em ASCII

Mensagempor KrafT » 30 Ago 2015 09:57

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. :?
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: C# Converter List<byte> em ASCII

Mensagempor Red Neck Guy » 30 Ago 2015 10:47

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;
        }
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: C# Converter List<byte> em ASCII

Mensagempor Red Neck Guy » 30 Ago 2015 10:48

Então, aquela lista que populei antes do foreach é igual a que tu tens?
Dentro dela não existem caracteres de controle, certo?
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: C# Converter List<byte> em ASCII

Mensagempor Red Neck Guy » 30 Ago 2015 10:53

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;
        }
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: C# Converter List<byte> em ASCII

Mensagempor Red Neck Guy » 30 Ago 2015 10:54

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;
        }
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: C# Converter List<byte> em ASCII

Mensagempor KrafT » 30 Ago 2015 11:49

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.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: C# Converter List<byte> em ASCII

Mensagempor xultz » 31 Ago 2015 08:19

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.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: C# Converter List<byte> em ASCII

Mensagempor KrafT » 31 Ago 2015 09:09

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)
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x