Cách lấy giá trị ASCII của chuỗi trong C #


108

Tôi muốn lấy giá trị ASCII của các ký tự trong một chuỗi trong C #.

Nếu chuỗi của tôi có giá trị "9quali52ty3", tôi muốn một mảng có các giá trị ASCII của mỗi ký tự trong số 11 ký tự.

Làm cách nào để nhận giá trị ASCII trong C #?


Bạn có nghĩa là bạn chỉ muốn các ký tự chữ cái chứ không phải các chữ số? Vì vậy, bạn muốn "chất lượng" là kết quả? Vì sau đó nói về ASCII không có ý nghĩa gì.
Lars Truijens

Tôi muốn Ascii của mỗi ký tự từ chuỗi đó, Ascii của chữ số cũng như ascii của từ "chất lượng"
RBS

Ý của bạn là bạn muốn giá trị ASCII bằng số của mỗi ký tự trong chuỗi, giả sử toàn bộ chuỗi có thể được biểu diễn bằng ASCII. Từ ngữ hiện tại của bạn rất khó hiểu.
bzlm

Câu trả lời:


189

Của MSDN

string value = "9quali52ty3";

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

Bây giờ bạn có một mảng giá trị ASCII của các byte. Tôi có những thứ sau:

57 113117 97 108 105 53 50 116 121 51


Điều này cho tôi thấy System.Byte []. Bạn cần lặp lại các ký tự trong từ. Không chắc bạn đã làm như thế nào. Đã giúp OP mặc dù đó là điều quan trọng.
NikosV 22/09/18

Lưu ý: Encoding.ASCIIđược cấu hình để phát ra đơn vị mã ASCII cho ký tự thay thế ('?') Cho các ký tự không có trong bộ ký tự ASCII. Các tùy chọn khác — bao gồm ném một ngoại lệ — có sẵn trong Encodinglớp. Và, tất nhiên, các mã hóa ký tự khác - đặc biệt là UTF-8 - cũng có sẵn; Người ta nên đặt câu hỏi liệu nó có phải là ASCII thực sự được mong muốn hay không.
Tom Blodget

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

12
Các mã kết quả là số Unicode và có thể chứa các mã không phải ASCII.
Lars Truijens

22

Điều này sẽ hoạt động:

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

8

Bạn có nghĩa là bạn chỉ muốn các ký tự chữ cái chứ không phải các chữ số? Vì vậy, bạn muốn "chất lượng" là kết quả? Bạn có thể sử dụng Char.IsLetter hoặc Char.IsDigit để lọc ra từng cái một.

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
đây cũng là một trong những ví dụ để thực hiện giá trị ascii cho mỗi charcter trong chuỗi cho trước
Mahesh

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

Nếu tôi nhớ không lầm, giá trị ASCII là số của bảy bit thấp hơn của số Unicode .


3

Nếu bạn muốn mã ký tự cho từng ký tự trong chuỗi, bạn có thể làm như sau:

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

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

3

Chương trình này sẽ chấp nhận nhiều hơn một ký tự và xuất ra giá trị ASCII của chúng:

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

Những người trả lời trước đó đã trả lời câu hỏi nhưng chưa cung cấp thông tin mà tiêu đề khiến tôi mong đợi. Tôi có một phương thức trả về một chuỗi một ký tự nhưng tôi muốn một ký tự mà tôi có thể chuyển đổi sang hệ thập lục phân. Đoạn mã sau đây thể hiện những gì tôi nghĩ rằng tôi sẽ tìm thấy với hy vọng nó hữu ích cho người khác.

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

Đoạn mã trên xuất như sau vào cửa sổ ngay lập tức:

a£Δ√

một 97 61

£ 163 A3

Δ 916 394

√ 8730 221A


2

Bạn có thể xóa BOM bằng cách sử dụng:

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

1

Hoặc trong LINQ:

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

0

Tôi muốn lấy giá trị ASCII của các ký tự trong một chuỗi trong C #.

Mọi người đều đưa ra câu trả lời trong cấu trúc này. Nếu chuỗi của tôi có giá trị "9quali52ty3", tôi muốn một mảng có các giá trị ASCII của mỗi ký tự trong số 11 ký tự.

nhưng trong giao diện điều khiển, chúng tôi làm việc thẳng thắn vì vậy chúng tôi nhận được một ký tự và in mã ASCII nếu tôi sai, vì vậy hãy sửa câu trả lời của tôi.

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

Câu trả lời này có thể sử dụng thêm một chút giải thích. Nếu có một đồng nghiệp thông thạo tiếng Anh hơn, bạn nên yêu cầu giúp đỡ.
O. Jones

lời giải thích của tôi rất đơn giản vì mã của tôi rất đơn giản mà không có bất kỳ biến nào nhưng sử dụng một khái niệm đơn giản làm thế nào có thể in giá trị ASCII riêng lẻ, đơn giản lấy một char và chuyển đổi char thành giá trị số nguyên, vì vậy hãy thực hiện điều này và nếu tôi có sai lầm trong giải thích của mình, xin bạn khắc phục điều này là nhờ
MA Nadeem

0

Tại sao không phải là cách dễ dàng kiểu cũ?

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

// bây giờ tốt hơn rồi;)


1
Mặc dù mã này có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do tại sao điều này giải quyết vấn đề sẽ thực sự giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều phiếu bầu hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những giới hạn và giả định áp dụng.
Dharman

Tạo ra lỗi biên dịch: "Ký tự không mong muốn". Hai `sau ToString có lẽ không nên ở đó.
BDL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.