Cómo obtener el valor ASCII de la cadena en C #


108

Quiero obtener el valor ASCII de los caracteres en una cadena en C #.

Si mi cadena tiene el valor "9quali52ty3", quiero una matriz con los valores ASCII de cada uno de los 11 caracteres.

¿Cómo puedo obtener valores ASCII en C #?


¿Quiere decir que solo quiere los caracteres alfabéticos y no los dígitos? ¿Entonces quieres "calidad" como resultado? Porque entonces hablar de ASCII tiene poco sentido.
Lars Truijens

Quiero Ascii de cada carácter de esa cadena, Ascii de dígitos y ascii de la palabra "calidad"
RBS

Lo que quiere decir es que quiere el valor ASCII numérico de cada carácter en la cadena, asumiendo que toda la cadena se puede representar en ASCII. Su redacción actual es muy confusa.
bzlm

Respuestas:


189

De MSDN

string value = "9quali52ty3";

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

Ahora tiene una matriz del valor ASCII de los bytes. Tengo lo siguiente:

57113117 97108105 53 50116121 51


Esto me muestra System.Byte []. Necesita recorrer los caracteres de la palabra. No estoy seguro de cómo lo hiciste funcionar. Ayudó al OP aunque que es lo que importa.
NikosV

Nota: Encoding.ASCIIestá configurado para emitir la unidad de código ASCII para el carácter de reemplazo ('?') Para caracteres que no están en el juego de caracteres ASCII. Otras opciones, incluido el lanzamiento de una excepción, están disponibles en la Encodingclase. Y, por supuesto, también están disponibles otras codificaciones de caracteres, especialmente UTF-8; Uno debería preguntarse si es ASCII lo que realmente se busca.
Tom Blodget

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

12
Los códigos resultantes son números Unicode y podrían contener códigos que no sean ASCII.
Lars Truijens

22

Esto debería funcionar:

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

8

¿Quiere decir que solo quiere los caracteres alfabéticos y no los dígitos? ¿Entonces quieres "calidad" como resultado? Puede utilizar Char.IsLetter o Char.IsDigit para filtrarlos uno por uno.

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 es también un ejemplo para implementar el valor ascii para cada carácter en una cadena dada
mahesh

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

Si mal no recuerdo, el valor ASCII es el número de los siete bits inferiores del número Unicode .


3

Si desea el código de caracteres para cada carácter de la cadena, puede hacer algo como esto:

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

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

3

Este programa aceptará más de un carácter y generará su 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

Los que respondieron anteriormente han respondido la pregunta pero no han proporcionado la información que el título me hizo esperar. Tenía un método que devolvía una cadena de un carácter, pero quería un carácter que pudiera convertir a hexadecimal. El siguiente código demuestra lo que pensé que encontraría con la esperanza de que sea útil para otros.

  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);

El código anterior genera lo siguiente en la ventana inmediata:

a£Δ√

un 97 61

163 £ A3

Δ 916 394

√ 8730 221A


2

Puede eliminar la lista de materiales usando:

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

1

O en LINQ:

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

0

Quiero obtener el valor ASCII de los caracteres en una cadena en C #.

Todos confieren respuesta en esta estructura. Si mi cadena tiene el valor "9quali52ty3", quiero una matriz con los valores ASCII de cada uno de los 11 caracteres.

pero en la consola trabajamos con franqueza, por lo que obtenemos un carácter e imprimimos el código ASCII si me equivoco, así que corrija mi respuesta.

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

Esta respuesta podría necesitar un poco más de explicación. Si tiene un colega con más fluidez en inglés, con respeto debe pedir ayuda.
O. Jones

mi explicación es muy simple porque mi código es muy simple sin ninguna variable, pero usé un concepto simple, ¿cómo se puede imprimir el valor ASCII individual? simple obtener un carácter y convertir el carácter en un valor entero, así que implemente esto y si tengo un error en mi explicación, entonces por favor corrija esto gracias
MA Nadeem

0

¿Por qué no de la manera fácil a la antigua?

    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);

// es` mejor ahora;)


1
Si bien este código puede resolver la pregunta, incluir una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación y probablemente resultaría en más votos a favor. Recuerde que está respondiendo la pregunta a los lectores en el futuro, no solo a la persona que pregunta ahora. Por favor, editar su respuesta para agregar explicaciones y dar una indicación de lo que se aplican limitaciones y supuestos.
Dharman

Da un error de compilación: "Carácter inesperado". Los dos `después del ToString probablemente no deberían estar allí.
BDL
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.