Comment obtenir la valeur ASCII d'une chaîne en C #


109

Je veux obtenir la valeur ASCII des caractères dans une chaîne en C #.

Si ma chaîne a la valeur "9quali52ty3", je veux un tableau avec les valeurs ASCII de chacun des 11 caractères.

Comment puis-je obtenir des valeurs ASCII en C #?


Voulez-vous dire que vous ne voulez que les caractères alphabétiques et non les chiffres? Vous voulez donc de la «qualité»? Parce qu'alors, parler d'ASCII n'a pas de sens.
Lars Truijens

Je veux Ascii de chaque caractère de cette chaîne, Ascii de chiffres ainsi que ascii du mot «qualité»
RBS

Ce que vous voulez dire, c'est que vous voulez la valeur numérique ASCII de chaque caractère de la chaîne, en supposant que la chaîne entière puisse être représentée en ASCII. Votre libellé actuel est très déroutant.
bzlm

Réponses:


189

Depuis MSDN

string value = "9quali52ty3";

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

Vous avez maintenant un tableau de la valeur ASCII des octets. J'ai obtenu ce qui suit:

57113117 97108105 53 50116121 51


Cela me montre System.Byte []. Vous devez parcourir les caractères du mot. Je ne sais pas comment vous l'avez fait fonctionner. J'ai aidé l'OP, ce qui compte.
NikosV

Remarque: Encoding.ASCIIest configuré pour émettre l'unité de code ASCII pour le caractère de remplacement ('?') Pour les caractères qui ne sont pas dans le jeu de caractères ASCII. D'autres options, y compris la levée d'une exception, sont disponibles dans la Encodingclasse. Et, bien sûr, d'autres encodages de caractères - en particulier UTF-8 - sont également disponibles; Il faut se demander si c'est l'ASCII qui est réellement recherché.
Tom Blodget du

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

12
Les codes résultants sont des nombres Unicode et peuvent contenir des codes non ASCII.
Lars Truijens

22

Cela devrait fonctionner:

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

8

Voulez-vous dire que vous ne voulez que les caractères alphabétiques et non les chiffres? Vous voulez donc de la «qualité»? Vous pouvez utiliser Char.IsLetter ou Char.IsDigit pour les filtrer un par un.

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
c'est aussi un exemple pour implémenter la valeur ascii pour chaque caractère dans une chaîne donnée
mahesh

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

Si je me souviens bien, la valeur ASCII est le nombre des sept bits inférieurs du nombre Unicode .


3

Si vous voulez le charcode pour chaque caractère de la chaîne, vous pouvez faire quelque chose comme ceci:

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

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

3

Ce programme acceptera plus d'un caractère et affichera leur valeur 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

Les premiers répondants ont répondu à la question mais n'ont pas fourni les informations auxquelles le titre m'avait amené à m'attendre. J'avais une méthode qui renvoyait une chaîne d'un caractère mais je voulais un caractère que je pourrais convertir en hexadécimal. Le code suivant montre ce que je pensais trouver dans l'espoir qu'il soit utile aux autres.

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

Le code ci-dessus affiche les éléments suivants dans la fenêtre immédiate:

a£Δ√

un 97 61

163 £ A3

Δ 916 394

√ 8730 221A


2

Vous pouvez supprimer la nomenclature en utilisant:

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

1

Ou dans LINQ:

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

0

Je veux obtenir la valeur ASCII des caractères dans une chaîne en C #.

Tout le monde confère la réponse dans cette structure. Si ma chaîne a la valeur "9quali52ty3", je veux un tableau avec les valeurs ASCII de chacun des 11 caractères.

mais dans la console, nous travaillons la franchise donc nous obtenons un caractère et imprimons le code ASCII si je me trompe, veuillez donc corriger ma réponse.

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

Cette réponse pourrait nécessiter un peu plus d'explications. Si vous avez un collègue qui parle plus couramment l'anglais, avec respect, vous devriez demander de l'aide.
O. Jones

mon explication est très simple car mon code est très simple sans aucune variable mais utilise un concept simple comment imprimer une valeur ASCII individuelle simple obtenir un caractère et convertir le caractère en valeur entière, alors s'il vous plaît, implémentez ceci et si j'ai une erreur dans mon explication, alors merci de corriger ceci merci
MA Nadeem

0

Pourquoi pas la méthode facile à l'ancienne?

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

// c'est `mieux maintenant;)


1
Bien que ce code puisse résoudre la question, inclure une explication sur comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre message et entraînerait probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limites et des hypothèses applicables.
Dharman

Donne une erreur de compilation: "Caractère inattendu". Les deux `après le ToString ne devraient probablement pas être là.
BDL
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.