Come ottenere il valore ASCII della stringa in C #


109

Voglio ottenere il valore ASCII dei caratteri in una stringa in C #.

Se la mia stringa ha il valore "9quali52ty3", voglio un array con i valori ASCII di ciascuno degli 11 caratteri.

Come posso ottenere valori ASCII in C #?


Vuoi dire che vuoi solo i caratteri alfabetici e non le cifre? Quindi vuoi "qualità" come risultato? Perché allora parlare di ASCII ha poco senso.
Lars Truijens

Voglio Ascii di ogni carattere di quella stringa, Ascii di cifre e ASCII di parola "qualità"
RBS

Quello che vuoi dire è che vuoi il valore ASCII numerico di ogni carattere nella stringa, assumendo che l'intera stringa possa essere rappresentata in ASCII. La tua formulazione attuale è molto confusa.
bzlm

Risposte:


189

A partire dal MSDN

string value = "9quali52ty3";

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

Ora hai un array del valore ASCII dei byte. Ho ottenuto quanto segue:

57113117 97108105 53 50116121 51


Questo mi mostra System.Byte []. Devi scorrere i caratteri nella parola. Non sono sicuro di come hai fatto a farlo funzionare. Ha aiutato l'OP, che è ciò che conta.
NikosV

Nota: Encoding.ASCIIè configurato per emettere l'unità di codice ASCII per il carattere sostitutivo ('?') Per i caratteri che non sono nel set di caratteri ASCII. Altre opzioni, inclusa la generazione di un'eccezione, sono disponibili nella Encodingclasse. E, naturalmente, sono disponibili anche altre codifiche di caratteri, specialmente UTF-8; Ci si dovrebbe chiedere se è ASCII che è effettivamente desiderato.
Tom Blodget,

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

12
I codici risultanti sono numeri Unicode e potrebbero potenzialmente contenere codici non ASCII.
Lars Truijens

22

Questo dovrebbe funzionare:

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

8

Vuoi dire che vuoi solo i caratteri alfabetici e non le cifre? Quindi vuoi "qualità" come risultato? Puoi usare Char.IsLetter o Char.IsDigit per filtrarli uno per 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
questo è anche uno degli esempi per implementare il valore ascii per ogni carattere nella stringa data
mahesh

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

Se ricordo bene, il valore ASCII è il numero dei sette bit inferiori del numero Unicode .


3

Se vuoi il codice di caratteri per ogni carattere nella stringa, potresti fare qualcosa del genere:

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

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

3

Questo programma accetterà più di un carattere e restituirà il loro valore 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

Chi ha risposto in precedenza ha risposto alla domanda ma non ha fornito le informazioni che il titolo mi aveva fatto aspettare. Avevo un metodo che restituiva una stringa di un carattere ma volevo un carattere che potessi convertire in esadecimale. Il codice seguente dimostra cosa pensavo di trovare nella speranza che fosse utile per gli altri.

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

Il codice precedente restituisce quanto segue nella finestra immediata:

a£Δ√

a 97 61

£ 163 A3

Δ 916 394

√ 8730 221A


2

Puoi rimuovere la distinta materiali utilizzando:

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

1

O in LINQ:

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

0

Voglio ottenere il valore ASCII dei caratteri in una stringa in C #.

Ognuno conferisce risposta in questa struttura. Se la mia stringa ha il valore "9quali52ty3", voglio un array con i valori ASCII di ciascuno degli 11 caratteri.

ma in console lavoriamo con franchezza, quindi otteniamo un carattere e stampiamo il codice ASCII se sbaglio quindi per favore correggi la mia risposta.

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

Questa risposta potrebbe utilizzare un po 'più di spiegazione. Se hai un collega più fluente in inglese, con rispetto dovresti chiedere aiuto.
O. Jones

la mia spiegazione è molto semplice perché il mio codice è molto semplice senza variabili ma ha usato un concetto semplice come posso stampare un valore ASCII individuale semplice ottenere un carattere e convertire il carattere in un valore intero quindi per favore implementalo e se ho un errore nella mia spiegazione quindi per favore correggi questo grazie
MA Nadeem

0

Perché non alla vecchia maniera facile?

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

// è meglio adesso;)


1
Sebbene questo codice possa risolvere la domanda, inclusa una spiegazione di come e perché questo risolve il problema aiuterebbe davvero a migliorare la qualità del tuo post e probabilmente si tradurrebbe in più voti positivi. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo alla persona che chiede ora. Si prega di modificare la risposta per aggiungere spiegazioni e dare un'indicazione di ciò si applicano le limitazioni e le assunzioni.
Dharman

Fornisce un errore di compilazione: "Carattere imprevisto". I due `dopo ToString probabilmente non dovrebbero essere lì.
BDL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.