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

RBS
la source
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


la source
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);
}
LeppyR64
la source
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);
}
Jason
la source
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
Lars Truijens
la source
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
la source
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 .

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

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

Monarc Dev
la source
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