C # 'da dizenin ASCII değeri nasıl alınır


109

C # 'da bir dizedeki karakterlerin ASCII değerini almak istiyorum.

Dizim "9quali52ty3" değerine sahipse, 11 karakterin her birinin ASCII değerlerine sahip bir dizi istiyorum.

C # 'da ASCII değerlerini nasıl alabilirim?


Rakamları değil, yalnızca alfabetik karakterleri istediğinizi mi söylüyorsunuz? Yani sonuç olarak "kalite" mi istiyorsunuz? O halde ASCII hakkında konuşmak pek mantıklı değil.
Lars Truijens

Bu dizedeki her karakter için Ascii, basamaklı Ascii ve "kalite" kelimesinin
ascii'sini istiyorum

Demek istediğiniz, dizenin tamamının ASCII'de temsil edilebileceğini varsayarak, dizedeki her karakterin sayısal ASCII değerini istediğinizdir. Şu anki ifadeniz çok kafa karıştırıcı.
bzlm

Yanıtlar:


189

Gönderen MSDN

string value = "9quali52ty3";

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

Artık baytların ASCII değerinin bir dizisine sahipsiniz. Aşağıdakileri aldım:

57113117 97108105 53 50116121 51


Bu bana System.Byte [] 'ı gösteriyor. Kelimedeki karakterlerin üzerinden geçmeniz gerekir. Nasıl çalıştırdığından emin değilim. OP'ye yardım etti, önemli olan bu.
NikosV

Not: Encoding.ASCIIASCII karakter kümesinde olmayan karakterler için değiştirme karakteri ('?') İçin ASCII kod birimi yayınlayacak şekilde yapılandırılmıştır. Diğer seçenekler - bir istisna atma dahil - Encodingsınıfta mevcuttur . Ve elbette, diğer karakter kodlamaları - özellikle UTF-8 - de mevcuttur; Aslında istenen ASCII olup olmadığı sorgulanmalıdır.
Tom Blodget

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

12
Ortaya çıkan kodlar Unicode sayılardır ve potansiyel olarak ASCII olmayan kodlar içerebilir.
Lars Truijens

22

Bu çalışmalı:

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

8

Rakamları değil, yalnızca alfabetik karakterleri istediğinizi mi söylüyorsunuz? Yani sonuç olarak "kalite" mi istiyorsunuz? Bunları birer birer filtrelemek için Char.IsLetter veya Char.IsDigit kullanabilirsiniz.

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
bu aynı zamanda verilen dizedeki her karakter için ascii değerini uygulamak için bir örnektir
mahesh

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

Doğru hatırlıyorsam, ASCII değeri Unicode sayısının küçük yedi bitinin sayısıdır.


3

Dizedeki her karakterin karakter kodunu istiyorsanız, bunun gibi bir şey yapabilirsiniz:

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

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

3

Bu program birden fazla karakteri kabul edecek ve ASCII değerini verecektir:

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

Daha önce yanıt verenler soruyu yanıtladılar ancak başlığın beklememe neden olduğu bilgileri sağlamadılar. Tek karakterlik bir dizge döndüren bir yöntemim vardı ama onaltılıya dönüştürebileceğim bir karakter istedim. Aşağıdaki kod, başkalarına yardımcı olması umuduyla bulacağımı düşündüğüm şeyi göstermektedir.

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

Yukarıdaki kod, hemen pencereye şunu çıkarır:

a£Δ√

bir 97 61

163 £ A3

916 394

√ 8730 221A


2

Malzeme Listesini şu şekilde kaldırabilirsiniz :

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

1

Veya LINQ'da:

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

0

C # 'da bir dizedeki karakterlerin ASCII değerini almak istiyorum.

Bu yapıda herkes cevap veriyor. Dizim "9quali52ty3" değerine sahipse, 11 karakterin her birinin ASCII değerlerine sahip bir dizi istiyorum.

ama konsolda dürüstlükle çalışıyoruz, bu yüzden bir karakter alıyoruz ve yanılıyorsam ASCII kodunu yazdırıyoruz, lütfen cevabımı düzeltin.

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

Bu cevap biraz daha fazla açıklama kullanabilir. Eğer İngilizceyi daha akıcı konuşan bir meslektaşınız varsa, saygıyla yardım istemelisiniz.
O. Jones

Açıklamam çok basit çünkü kodum değişkenler olmadan çok basit ama basit bir kavram kullandı ASCII değerini nasıl yazdırabilirim, bireysel basit bir karakter olsun ve karakteri tamsayı değerine dönüştürün, bu yüzden lütfen bunu uygulayın ve açıklamamda bir hata varsa lütfen bunu düzeltin
MA Nadeem

0

Neden eski moda kolay yol olmasın?

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

// şimdi daha iyi;)


1
Bu kod soruyu çözebilirken, sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere , gönderinizin kalitesini artırmaya gerçekten yardımcı olur ve muhtemelen daha fazla oy almanıza neden olur. Sadece şu anda soran kişi için değil, gelecekte okuyucular için soruyu yanıtladığınızı unutmayın. Açıklamalar eklemek ve hangi sınırlamaların ve varsayımların geçerli olduğuna dair bir gösterge vermek için lütfen yanıtınızı düzenleyin .
Dharman

Bir derleme hatası verir: "Beklenmeyen karakter". ToString'den sonraki iki `muhtemelen orada olmamalı.
BDL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.