So erhalten Sie den ASCII-Wert eines Strings in C #

108

Ich möchte den ASCII-Wert von Zeichen in einer Zeichenfolge in C # erhalten.

Wenn meine Zeichenfolge den Wert "9quali52ty3" hat, möchte ich ein Array mit den ASCII-Werten der 11 Zeichen.

Wie kann ich ASCII-Werte in C # erhalten?

RBS
quelle
Meinst du, du willst nur die alphabetischen Zeichen und nicht die Ziffern? Sie wollen also "Qualität"? Denn dann macht es wenig Sinn, über ASCII zu sprechen.
Lars Truijens
Ich möchte Ascii von jedem Zeichen aus dieser Zeichenfolge, Ascii von Ziffern sowie Ascii von Wort "Qualität"
RBS
Sie meinen, Sie möchten den numerischen ASCII-Wert jedes Zeichens in der Zeichenfolge, vorausgesetzt, die gesamte Zeichenfolge kann in ASCII dargestellt werden. Ihr aktueller Wortlaut ist sehr verwirrend.
bzlm

Antworten:

189

Von MSDN

string value = "9quali52ty3";

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

Sie haben jetzt ein Array des ASCII-Werts der Bytes. Ich habe folgendes:

57 113 117 97 108 105 53 50 116 121 51


quelle
Dies zeigt mir System.Byte []. Sie müssen die Zeichen im Wort durchlaufen. Ich bin mir nicht sicher, wie du es zum Laufen gebracht hast. Hat dem OP geholfen, worauf es ankommt.
NikosV
Hinweis: Encoding.ASCIIist so konfiguriert, dass die ASCII-Codeeinheit für das Ersatzzeichen ('?') Für Zeichen ausgegeben wird, die nicht im ASCII-Zeichensatz enthalten sind. Andere Optionen - einschließlich des Auslösens einer Ausnahme - sind in der EncodingKlasse verfügbar . Natürlich sind auch andere Zeichenkodierungen - insbesondere UTF-8 - verfügbar. Man sollte sich fragen, ob tatsächlich ASCII gewünscht wird.
Tom Blodget
37
string s = "9quali52ty3";
foreach(char c in s)
{
  Console.WriteLine((int)c);
}
LeppyR64
quelle
12
Die resultierenden Codes sind Unicode-Nummern und können möglicherweise Nicht-ASCII-Codes enthalten.
Lars Truijens
22

Das sollte funktionieren:

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

Meinst du, du willst nur die alphabetischen Zeichen und nicht die Ziffern? Sie wollen also "Qualität"? Sie können Char.IsLetter oder Char.IsDigit verwenden, um sie einzeln herauszufiltern.

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
quelle
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
quelle
3
Dies ist auch ein Beispiel für die Implementierung eines ASCII-Werts für jeden Zeichen in einem bestimmten String
Mahesh
4
string text = "ABCD";
for (int i = 0; i < text.Length; i++)
{
  Console.WriteLine(text[i] + " => " + Char.ConvertToUtf32(text, i));
}

Wenn ich mich richtig erinnere, ist der ASCII-Wert die Nummer der unteren sieben Bits der Unicode- Nummer.

Rauhotz
quelle
3

Wenn Sie den Zeichencode für jedes Zeichen in der Zeichenfolge möchten, können Sie Folgendes tun:

char[] chars = "9quali52ty3".ToCharArray();
Neil Barnwell
quelle
3
byte[] asciiBytes = Encoding.ASCII.GetBytes("Y");
foreach (byte b in asciiBytes)
{
    MessageBox.Show("" + b);
}
Moleatom
quelle
3

Dieses Programm akzeptiert mehr als ein Zeichen und gibt seinen ASCII-Wert aus:

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
quelle
2

Frühere Antwortende haben die Frage beantwortet, aber nicht die Informationen angegeben, die ich aufgrund des Titels erwartet hatte. Ich hatte eine Methode, die eine Zeichenfolge mit einem Zeichen zurückgab, aber ich wollte ein Zeichen, das ich in hexadezimal konvertieren konnte. Der folgende Code zeigt, was ich zu finden glaubte, in der Hoffnung, dass es für andere hilfreich ist.

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

Der obige Code gibt Folgendes an das unmittelbare Fenster aus:

a£Δ√

a 97 61

£ 163 A3

Δ 916 394

√ 8730 221A

Tony Dallimore
quelle
2

Sie können die Stückliste entfernen mit:

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

Oder in LINQ:

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

Ich möchte den ASCII-Wert von Zeichen in einer Zeichenfolge in C # erhalten.

Jeder gibt in dieser Struktur eine Antwort. Wenn meine Zeichenfolge den Wert "9quali52ty3" hat, möchte ich ein Array mit den ASCII-Werten der 11 Zeichen.

Aber in der Konsole arbeiten wir offen, also bekommen wir ein Zeichen und drucken den ASCII-Code, wenn ich falsch liege. Bitte korrigieren Sie meine Antwort.

 static void Main(string[] args)
        {
            Console.WriteLine(Console.Read());
            Convert.ToInt16(Console.Read());
            Console.ReadKey();
        }
MA Nadeem
quelle
Diese Antwort könnte etwas mehr Erklärung gebrauchen. Wenn Sie einen Kollegen haben, der fließender Englisch spricht, sollten Sie mit Respekt um Hilfe bitten.
O. Jones
Meine Erklärung ist sehr einfach, da mein Code ohne Variablen sehr einfach ist, aber ein einfaches Konzept verwendet, wie man einen ASCII-Wert drucken kann. Einfach einfach ein Zeichen abrufen und das Zeichen in einen ganzzahligen Wert konvertieren Bitte korrigieren Sie dies danke
MA Nadeem
0

Warum nicht der altmodische einfache Weg?

    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
quelle
-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 ist jetzt besser;)

Monarc Dev
quelle
1
Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
Dharman
Gibt einen Kompilierungsfehler aus: "Unerwartetes Zeichen". Die beiden nach dem ToString sollten wahrscheinlich nicht da sein.
BDL