Cara mendapatkan nilai ASCII dari string di C #

109

Saya ingin mendapatkan nilai karakter ASCII dalam string di C #.

Jika string saya memiliki nilai "9quali52ty3", saya ingin array dengan nilai ASCII dari masing-masing 11 karakter.

Bagaimana saya bisa mendapatkan nilai ASCII di C #?

RBS
sumber
Apakah maksud Anda Anda hanya menginginkan karakter abjad dan bukan angka? Jadi, Anda menginginkan "kualitas" sebagai hasilnya? Karena kemudian berbicara tentang ASCII tidak masuk akal.
Lars Truijens
Saya ingin Ascii setiap karakter dari string itu, Ascii digit serta ascii dari kata "kualitas"
RBS
Yang Anda maksud adalah Anda menginginkan nilai ASCII numerik dari setiap karakter dalam string, dengan asumsi seluruh string dapat direpresentasikan dalam ASCII. Kata-kata Anda saat ini sangat membingungkan.
bzlm

Jawaban:

189

Dari MSDN

string value = "9quali52ty3";

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

Anda sekarang memiliki larik nilai ASCII byte. Saya mendapatkan yang berikut:

57113 117 97108105 53 50116121 51


sumber
Ini menunjukkan kepada saya System.Byte []. Anda perlu mengulang karakter di kata. Tidak yakin bagaimana Anda membuatnya bekerja. Membantu OP meskipun itulah yang penting.
NikosV
Catatan: Encoding.ASCIIdikonfigurasi untuk mengeluarkan unit kode ASCII untuk karakter pengganti ('?') Untuk karakter yang tidak ada dalam kumpulan karakter ASCII. Opsi lain — termasuk melempar pengecualian — tersedia di Encodingkelas. Dan, tentu saja, pengkodean karakter lain — terutama UTF-8 — juga tersedia; Orang harus mempertanyakan apakah ASCII yang benar-benar diinginkan.
Tom Blodget
37
string s = "9quali52ty3";
foreach(char c in s)
{
  Console.WriteLine((int)c);
}
LeppyR64
sumber
12
Kode yang dihasilkan adalah nomor Unicode dan berpotensi berisi kode non ASCII.
Lars Truijens
22

Ini harus bekerja:

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

Apakah maksud Anda Anda hanya menginginkan karakter abjad dan bukan angka? Jadi, Anda menginginkan "kualitas" sebagai hasilnya? Anda dapat menggunakan Char.IsLetter atau Char.IsDigit untuk memfilternya satu per satu.

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
sumber
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
sumber
3
ini juga salah satu contoh untuk mengimplementasikan nilai ascii untuk setiap karakter dalam string yang diberikan
mahesh
4
string text = "ABCD";
for (int i = 0; i < text.Length; i++)
{
  Console.WriteLine(text[i] + " => " + Char.ConvertToUtf32(text, i));
}

Jika saya ingat dengan benar, nilai ASCII adalah nomor tujuh bit yang lebih rendah dari nomor Unicode .

Rauhotz
sumber
3

Jika Anda menginginkan kode karakter untuk setiap karakter dalam string, Anda dapat melakukan sesuatu seperti ini:

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

Program ini akan menerima lebih dari satu karakter dan mengeluarkan nilai ASCII-nya:

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

Responden sebelumnya telah menjawab pertanyaan tetapi belum memberikan informasi yang saya harapkan dari judul. Saya memiliki metode yang mengembalikan string satu karakter tetapi saya menginginkan karakter yang dapat saya ubah menjadi heksadesimal. Kode berikut menunjukkan apa yang saya pikir akan saya temukan dengan harapan berguna bagi orang lain.

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

Kode di atas menampilkan yang berikut ke jendela langsung:

a£Δ√

a 97 61

£ 163 A3

Δ 916 394

√ 8730 221A

Tony Dallimore
sumber
2

Anda dapat menghapus BOM menggunakan:

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

Atau di LINQ:

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

Saya ingin mendapatkan nilai karakter ASCII dalam string di C #.

Setiap orang memberikan jawaban dalam struktur ini. Jika string saya memiliki nilai "9quali52ty3", saya ingin array dengan nilai ASCII dari masing-masing 11 karakter.

tetapi di konsol kami bekerja terus terang jadi kami mendapatkan karakter dan mencetak kode ASCII jika saya salah jadi tolong perbaiki jawaban saya.

 static void Main(string[] args)
        {
            Console.WriteLine(Console.Read());
            Convert.ToInt16(Console.Read());
            Console.ReadKey();
        }
MA Nadeem
sumber
Jawaban ini membutuhkan lebih banyak penjelasan. Jika Anda memiliki kolega yang lebih fasih berbahasa Inggris, dengan hormat Anda harus meminta bantuan.
O. Jones
penjelasan saya sangat sederhana karena kode saya sangat sederhana tanpa variabel tetapi menggunakan konsep sederhana bagaimana dapat mencetak nilai ASCII individu sederhana mendapatkan char dan mengkonversi char dalam nilai integer jadi tolong Anda menerapkan ini dan jika saya memiliki kesalahan dalam penjelasan saya jadi tolong Anda perbaiki ini, terima kasih
MA Nadeem
0

Mengapa tidak cara mudah kuno?

    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
sumber
-1
    string nomFile = "9quali52ty3";  

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

// sekarang lebih baik;)

Monarc Dev
sumber
1
Meskipun kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu untuk meningkatkan kualitas posting Anda, dan mungkin menghasilkan lebih banyak suara. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang. Harap edit jawaban Anda untuk menambahkan penjelasan dan memberikan indikasi batasan dan asumsi apa yang berlaku.
Dharman
Memberikan kesalahan kompilasi: "Karakter tidak terduga". Keduanya `setelah ToString mungkin seharusnya tidak ada di sana.
BDL