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


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


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

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

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

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


3

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

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

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

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

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


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

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

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

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

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.