Como obter o valor ASCII da string em C #


109

Eu quero obter o valor ASCII dos caracteres em uma string em C #.

Se minha string tiver o valor "9quali52ty3", quero uma matriz com os valores ASCII de cada um dos 11 caracteres.

Como posso obter valores ASCII em C #?


Quer dizer que você quer apenas os caracteres alfabéticos e não os dígitos? Então você quer "qualidade" como resultado? Porque então falar sobre ASCII faz pouco sentido.
— Lars Truijens

Eu quero ASCII de cada caractere dessa string, ASCII de dígitos, bem como ASCII da palavra "qualidade"
— RBS

O que você quer dizer é que deseja o valor ASCII numérico de cada caractere da string, presumindo que toda a string possa ser representada em ASCII. Seu texto atual é muito confuso.
— bzlm

Respostas:


189

Do MSDN

string value = "9quali52ty3";

// Convert the string into a byte[].
byte[] asciiBytes = Encoding.ASCII.GetBytes(value);

Agora você tem uma matriz do valor ASCII dos bytes. Eu tenho o seguinte:

57 113 117 97 108 105 53 50 116 121 51


Isso me mostra System.Byte []. Você precisa percorrer os caracteres da palavra. Não sei como você fez isso funcionar. Ajudei o OP, mas é isso que importa.
— NikosV

Nota: Encoding.ASCIIestá configurado para emitir a unidade de código ASCII para o caractere de substituição ('?') Para caracteres que não estão no conjunto de caracteres ASCII. Outras opções - incluindo lançar uma exceção - estão disponíveis na Encodingclasse. E, é claro, outras codificações de caracteres - especialmente UTF-8 - também estão disponíveis; Deve-se questionar se o ASCII é realmente desejado.
— Tom Blodget

37
string s = "9quali52ty3";
foreach(char c in s)
{
  Console.WriteLine((int)c);
}

12
Os códigos resultantes são números Unicode e podem conter códigos não ASCII.
— Lars Truijens

22

Isso deve funcionar:

string s = "9quali52ty3";
byte[] ASCIIValues = Encoding.ASCII.GetBytes(s);
foreach(byte b in ASCIIValues) {
    Console.WriteLine(b);
}

8

Quer dizer que você quer apenas os caracteres alfabéticos e não os dígitos? Então você quer "qualidade" como resultado? Você pode usar Char.IsLetter ou Char.IsDigit para filtrá-los um por um.

string s = "9quali52ty3";
StringBuilder result = new StringBuilder();
foreach(char c in s)
{
  if (Char.IsLetter(c))  
    result.Add(c);
}
Console.WriteLine(result);  // quality

4
string value = "mahesh";

// Convert the string into a byte[].
byte[] asciiBytes = Encoding.ASCII.GetBytes(value);

for (int i = 0; i < value.Length; i++)


    {
        Console.WriteLine(value.Substring(i, 1) + " as ASCII value of: " + asciiBytes[i]);
    }

3
este é também um exemplo para implementar o valor ASCII para cada caractere em uma determinada string
— mahesh

4
string text = "ABCD";
for (int i = 0; i < text.Length; i++)
{
  Console.WriteLine(text[i] + " => " + Char.ConvertToUtf32(text, i));
}

Se bem me lembro, o valor ASCII é o número dos sete bits inferiores do número Unicode .


3

Se você quiser o charcode para cada caractere na string, pode fazer algo assim:

char[] chars = "9quali52ty3".ToCharArray();

3
byte[] asciiBytes = Encoding.ASCII.GetBytes("Y");
foreach (byte b in asciiBytes)
{
    MessageBox.Show("" + b);
}

3

Este programa aceitará mais de um caractere e produzirá seu valor ASCII:

using System;
class ASCII
{
    public static void Main(string [] args)
    {
        string s;
        Console.WriteLine(" Enter your sentence: ");
        s = Console.ReadLine();
        foreach (char c in s)
        {
            Console.WriteLine((int)c);
        }
    }
}

2

Os respondentes anteriores responderam à pergunta, mas não forneceram as informações que o título me levou a esperar. Eu tinha um método que retornava uma string de um caractere, mas queria um caractere que pudesse converter em hexadecimal. O código a seguir demonstra o que pensei que encontraria na esperança de que seja útil para outras pessoas.

  string s = "\ta£\x0394\x221A";   // tab; lower case a; pound sign; Greek delta;
                                   // square root  
  Debug.Print(s);
  char c = s[0];
  int i = (int)c;
  string x = i.ToString("X");
  c = s[1];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);
  c = s[2];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);
  c = s[3];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);
  c = s[4];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);

O código acima produz o seguinte na janela imediata:

a£Δ√

a 97 61

£ 163 A3

Δ 916 394

√ 8730 221A


2

Você pode remover o BOM usando:

//Create a character to compare BOM
char byteOrderMark = (char)65279;
if (sourceString.ToCharArray()[0].Equals(byteOrderMark))
{
    targetString = sourceString.Remove(0, 1);
}

1

Ou em LINQ:

string value = "9quali52ty3";
var ascii_values = value.Select(x => (int)x);
var as_hex = value.Select(x => ((int)x).ToString("X02"));

0

Eu quero obter o valor ASCII dos caracteres em uma string em C #.

Todos conferem resposta nesta estrutura. Se minha string tiver o valor "9quali52ty3", quero uma matriz com os valores ASCII de cada um dos 11 caracteres.

mas no console nós trabalhamos com franqueza então pegamos um char e imprimimos o código ASCII se eu estiver errado, então corrija minha resposta.

 static void Main(string[] args)
        {
            Console.WriteLine(Console.Read());
            Convert.ToInt16(Console.Read());
            Console.ReadKey();
        }

Esta resposta precisa de um pouco mais de explicação. Se você tem um colega mais fluente em inglês, com respeito você deve pedir ajuda.
— O. Jones

minha explicação é muito simples porque meu código é muito simples sem quaisquer variáveis, mas usei um conceito simples de como imprimir o valor ASCII individual simples obter um caractere e converter o caractere em valor inteiro, por favor, implemente isso e se eu tiver um erro na minha explicação, por favor, corrija isso obrigado
— MA Nadeem

0

Por que não da maneira fácil e antiquada?

    public int[] ToASCII(string s)
    {
        char c;
        int[] cByte = new int[s.Length];   / the ASCII string
        for (int i = 0; i < s.Length; i++)
        {
            c = s[i];                        // get a character from the string s
            cByte[i] = Convert.ToInt16(c);   // and convert it to ASCII
        }
        return cByte;
    }

-1
    string nomFile = "9quali52ty3";  

     byte[] nomBytes = Encoding.ASCII.GetBytes(nomFile);
     string name = "";
     foreach (byte he in nomBytes)
     {
         name += he.ToString("X02");
     }
`
     Console.WriteLine(name);

// está melhor agora;)


1
Embora este código possa resolver a questão, incluir uma explicação de como e por que isso resolve o problema realmente ajudaria a melhorar a qualidade da sua postagem e provavelmente resultaria em mais votos positivos. Lembre-se de que você está respondendo às perguntas dos leitores no futuro, não apenas da pessoa que está perguntando agora. Por favor edite sua resposta para adicionar explicações e dar uma indicação do que limitações e premissas se aplicam.
— Dharman

Fornece um erro de compilação: "Caractere inesperado". Os dois `após o ToString provavelmente não deveriam estar lá.
— BDL
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.