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 #?

RBS
fonte
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


fonte
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);
}
LeppyR64
fonte
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);
}
Jason
fonte
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
Lars Truijens
fonte
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]);
    }
mahesh
fonte
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 .

Rauhotz
fonte
3

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

char[] chars = "9quali52ty3".ToCharArray();
Neil Barnwell
fonte
3
byte[] asciiBytes = Encoding.ASCII.GetBytes("Y");
foreach (byte b in asciiBytes)
{
    MessageBox.Show("" + b);
}
moleatom
fonte
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);
        }
    }
}
M hasan
fonte
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

Tony Dallimore
fonte
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);
}
Md Shahzad Adil
fonte
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"));
ZagNut
fonte
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();
        }
MA Nadeem
fonte
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;
    }
F. Harthoorn
fonte
-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;)

Monarc Dev
fonte
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