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


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


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

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

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

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
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 .


3

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

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

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

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

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


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

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

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

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.