2011-02-15 20 views
15

dize düşünün.C# dizesinde bir karakterin ASCII Değerini Alma

+1

"en verimli" tanımlayın. :) Ayrıca, [C#] dizesinin ASCII değerini nasıl alabilirim olası bir kopyası (http://stackoverflow.com/questions/400733/how-to-get-ascii-value-of-string-in-c). Ayrıca, gerçekten ASCII'yi kastediyor musun? – bzlm

+5

Teknik olarak, C# karakterleri ASCII değil UNICODE kullanıyor. –

cevap

9

Burada dökme int sevmiyorum çünkü bir alternatiftir:

foreach(byte b in System.Text.Encoding.UTF8.GetBytes(str.ToCharArray())) 
    Console.Write(b.ToString()); 
+0

Eğer UTF8 yerine ASCII kullanırsanız, bu doğru olmalıdır .. ya da ascii değerlerini alamayacaksanız, UTF8 değerlerini alırsınız ... – Peter

+1

@Petoj - Bu, ascii'ye dönüştürme konusunda MSDN belgelerinden doğrudan alınır. "Doğru" yol, ConvertToUTF32() 'yi çağırmak olacaktır çünkü bu, karakterlerin kendilerinin doğru kodlanmasıdır. –

+1

Bu MSDN forma çekilebilir ama ben ASCII önce doğru 7 GB karakterleri içerir ve UTF8 çok daha fazla içerir ve ikinci olarak bazı UTF8 karakterleri 2 byte (veya daha fazla) olarak kaydedilir, böylece size katılmıyorum ne char ne daha fazla ne olduğunu belirlemek mümkün ... – Peter

18

Sadece bir int her bir karakteri döküm:

for (int i = 0; i < str.length; i++) 
    Console.Write(((int)str[i]).ToString()); 
+1

Bu, ASCII ile sınırlı olmayacak mı? – bzlm

+0

+1 - 'foreach (str.ToCharArray()' da char c ') kullanılarak yinelenebilir' –

+0

Tek bir yol var mı? –

2

Bu örnek size yardımcı olabilir. Basit döküm kullanarak urdu karakterinin arkasındaki kodu alabilirsiniz.

string str = "عثمان"; 
     char ch = ' '; 
     int number = 0; 
     for (int i = 0; i < str.Length; i++) 
     { 
      ch = str[i]; 
      number = (int)ch; 
      Console.WriteLine(number); 
     } 
+0

Bir "dize", UTF-16 kod birimlerinin sayılan bir dizisidir (bir veya iki tanesi Unicode kod noktasını kodlar), bu UTF-16 kod birimlerini alır. Kod noktaları daha insan tarafından okunabilir. Bunları elde etmek için UTF-32'ye dönüştürün çünkü UTF-32 kod birimleri ve Unicode kod noktaları bire birdir ve aynı değerlere sahiptir. –

0

İşte başka bir alternatif. Eğer giriş char ascii değilse, elbette kötü bir sonuç verecektir. Test ettim Perf ettik ama oldukça hızlı olacağını düşünüyorum :

[MethodImpl(MethodImplOptions.AggressiveInlining)] 
private static int GetAsciiVal(string s, int index) { 
    return GetAsciiVal(s[index]); 
} 

[MethodImpl(MethodImplOptions.AggressiveInlining)] 
private static int GetAsciiVal(char c) { 
    return unchecked(c & 0xFF); 
}