Jak uzyskać wartość ASCII ciągu w C #

109

Chcę uzyskać wartość ASCII znaków w ciągu w C #.

Jeśli mój ciąg ma wartość „9quali52ty3”, chcę mieć tablicę z wartościami ASCII każdego z 11 znaków.

Jak mogę uzyskać wartości ASCII w C #?

RBS
źródło
Czy masz na myśli tylko znaki alfabetu, a nie cyfry? Chcesz w rezultacie uzyskać „jakość”? Bo wtedy mówienie o ASCII nie ma sensu.
Lars Truijens,
Chcę Ascii każdego znaku z tego ciągu, Ascii cyfr oraz ascii słowa „jakość”
RBS
Masz na myśli to, że chcesz uzyskać numeryczną wartość ASCII każdego znaku w ciągu, zakładając, że cały ciąg może być reprezentowany w ASCII. Twoje obecne sformułowanie jest bardzo zagmatwane.
bzlm,

Odpowiedzi:

189

Z MSDN

string value = "9quali52ty3";

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

Masz teraz tablicę wartości ASCII bajtów. Otrzymałem następujące informacje:

57 113 117 97 108 105 53 50 116 121 51


źródło
To pokazuje mi System.Byte []. Musisz przejrzeć znaki w słowie. Nie wiem, jak to działa. Pomógł jednak OP, co ma znaczenie.
NikosV
Uwaga: Encoding.ASCIIjest skonfigurowany do emitowania jednostki kodu ASCII dla znaku zastępczego („?”) Dla znaków spoza zestawu znaków ASCII. Inne opcje - w tym zgłaszanie wyjątku - są dostępne w Encodingklasie. Oczywiście dostępne są także inne kodowania znaków - zwłaszcza UTF-8; Należy się zastanowić, czy faktycznie potrzebny jest ASCII.
Tom Blodget
37
string s = "9quali52ty3";
foreach(char c in s)
{
  Console.WriteLine((int)c);
}
LeppyR64
źródło
12
Wynikowe kody są numerami Unicode i mogą potencjalnie zawierać kody inne niż ASCII.
Lars Truijens
22

To powinno działać:

string s = "9quali52ty3";
byte[] ASCIIValues = Encoding.ASCII.GetBytes(s);
foreach(byte b in ASCIIValues) {
    Console.WriteLine(b);
}
Jason
źródło
8

Czy masz na myśli tylko znaki alfabetu, a nie cyfry? Chcesz w rezultacie uzyskać „jakość”? Możesz użyć Char.IsLetter lub Char.IsDigit, aby odfiltrować je jeden po drugim.

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
źródło
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
źródło
3
jest to również jeden z przykładów implementacji wartości ascii dla każdego znaku w danym ciągu
mahesh
4
string text = "ABCD";
for (int i = 0; i < text.Length; i++)
{
  Console.WriteLine(text[i] + " => " + Char.ConvertToUtf32(text, i));
}

Jeśli dobrze pamiętam, wartość ASCII to liczba siedmiu niższych bitów numeru Unicode .

Rauhotz
źródło
3

Jeśli chcesz mieć kod znaków dla każdego znaku w ciągu, możesz zrobić coś takiego:

char[] chars = "9quali52ty3".ToCharArray();
Neil Barnwell
źródło
3
byte[] asciiBytes = Encoding.ASCII.GetBytes("Y");
foreach (byte b in asciiBytes)
{
    MessageBox.Show("" + b);
}
kret
źródło
3

Ten program akceptuje więcej niż jeden znak i wyświetla ich wartość 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
źródło
2

Wcześniej respondenci odpowiedzieli na pytanie, ale nie podali informacji, których tytuł kazał mi oczekiwać. Miałem metodę, która zwracała jeden ciąg znaków, ale chciałem znak, który mógłbym przekonwertować na szesnastkowy. Poniższy kod ilustruje to, co moim zdaniem znajdę, mając nadzieję, że będzie to pomocne dla innych.

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

Powyższy kod wyświetla następujące informacje w bezpośrednim oknie:

a£Δ√

a 97 61

163 zł A3

Δ 916 394

√ 8730 221A

Tony Dallimore
źródło
2

Możesz usunąć zestawienie komponentów za pomocą:

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

Lub w LINQ:

string value = "9quali52ty3";
var ascii_values = value.Select(x => (int)x);
var as_hex = value.Select(x => ((int)x).ToString("X02"));
ZagNut
źródło
0

Chcę uzyskać wartość ASCII znaków w ciągu w C #.

Wszyscy udzielają odpowiedzi w tej strukturze. Jeśli mój ciąg ma wartość „9quali52ty3”, chcę mieć tablicę z wartościami ASCII każdego z 11 znaków.

ale w konsoli pracujemy szczerze, więc otrzymujemy znak i drukujemy kod ASCII, jeśli się pomylę, więc popraw odpowiedź.

 static void Main(string[] args)
        {
            Console.WriteLine(Console.Read());
            Convert.ToInt16(Console.Read());
            Console.ReadKey();
        }
MA Nadeem
źródło
Ta odpowiedź wymaga trochę więcej wyjaśnień. Jeśli masz kolegę biegle władającego językiem angielskim, z szacunkiem powinieneś poprosić o pomoc.
O. Jones
moje wyjaśnienie jest bardzo proste, ponieważ mój kod jest bardzo prosty bez żadnych zmiennych, ale wykorzystałem prostą koncepcję, w jaki sposób można wydrukować wartość ASCII indywidualna prosta, pobierz znak i przekonwertuj znak na wartość całkowitą, więc zaimplementuj to i jeśli mam błąd w moim wyjaśnieniu, więc proszę poprawić to dzięki
MA Nadeem
0

Dlaczego nie staromodną prostą drogą?

    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
źródło
-1
    string nomFile = "9quali52ty3";  

     byte[] nomBytes = Encoding.ASCII.GetBytes(nomFile);
     string name = "";
     foreach (byte he in nomBytes)
     {
         name += he.ToString("X02");
     }
`
     Console.WriteLine(name);

// teraz jest lepiej;)

Monarc Dev
źródło
1
Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
Dharman
Daje błąd kompilacji: „Nieoczekiwany znak”. Dwóch `po ToString prawdopodobnie nie powinno tam być.
BDL