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

RBS
fuente
¿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


fuente
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);
}
LeppyR64
fuente
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);
}
jason
fuente
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
Lars Truijens
fuente
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
fuente
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 .

Rauhotz
fuente
3

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

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

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

Desarrollo de Monarc
fuente
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