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.