วิธีรับค่า ASCII ของสตริงใน C #


111

ฉันต้องการรับค่า ASCII ของอักขระในสตริงใน C #

ถ้าสตริงของฉันมีค่า "9quali52ty3" ฉันต้องการอาร์เรย์ที่มีค่า ASCII ของอักขระ 11 ตัวแต่ละตัว

ฉันจะรับค่า ASCII ใน C # ได้อย่างไร


คุณหมายความว่าคุณต้องการเฉพาะอักขระที่เป็นตัวอักษรไม่ใช่ตัวเลขหรือไม่? คุณต้องการ "คุณภาพ" เป็นผลหรือไม่? สาเหตุที่การพูดถึง ASCII นั้นไม่ค่อยมีเหตุผล
Lars Truijens

ฉันต้องการ Ascii ของแต่ละอักขระจากสตริงนั้น, Ascii ของตัวเลขและ ascii ของคำว่า "quality"
RBS

สิ่งที่คุณหมายถึงคือคุณต้องการค่า ASCII ที่เป็นตัวเลขของแต่ละอักขระในสตริงโดยสมมติว่าสตริงทั้งหมดสามารถแสดงใน ASCII ได้ ข้อความปัจจุบันของคุณสับสนมาก
bzlm

คำตอบ:


192

จากMSDN

string value = "9quali52ty3";

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

ตอนนี้คุณมีอาร์เรย์ของค่า ASCII ของไบต์ ฉันได้รับสิ่งต่อไปนี้:

57113117 97 108105 53 50116121 51


นี่แสดงให้ฉันเห็น System Byte [] คุณต้องวนซ้ำตัวอักษรในคำ ไม่แน่ใจว่าคุณใช้งานได้อย่างไร ช่วย OP แม้ว่าสิ่งที่สำคัญ
NikosV

หมายเหตุ: Encoding.ASCIIถูกกำหนดค่าให้ปล่อยหน่วยรหัส ASCII สำหรับอักขระแทนที่ ('?') สำหรับอักขระที่ไม่อยู่ในชุดอักขระ ASCII ตัวเลือกอื่น ๆ รวมถึงการโยนข้อยกเว้นมีอยู่ในEncodingชั้นเรียน และแน่นอนว่ามีการเข้ารหัสอักขระอื่น ๆ โดยเฉพาะ UTF-8 ด้วยเช่นกัน ควรตั้งคำถามว่าเป็น ASCII ที่ต้องการจริงหรือไม่
Tom Blodget

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

12
รหัสผลลัพธ์เป็นหมายเลข Unicode และอาจมีรหัสที่ไม่ใช่ ASCII
Lars Truijens

22

สิ่งนี้ควรใช้งานได้:

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

9

คุณหมายความว่าคุณต้องการเฉพาะอักขระที่เป็นตัวอักษรไม่ใช่ตัวเลขหรือไม่? คุณต้องการ "คุณภาพ" เป็นผลหรือไม่? คุณสามารถใช้ Char.IsLetter หรือ Char.IsDigit เพื่อกรองออกทีละรายการ

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
นี่เป็นหนึ่งในตัวอย่างในการใช้ค่า ascii สำหรับแต่ละตัวอักษรในสตริงที่กำหนด
mahesh

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

ถ้าจำไม่ผิดค่า ASCII คือจำนวนเจ็ดบิตล่างของหมายเลขUnicode




3

โปรแกรมนี้จะยอมรับมากกว่าหนึ่งอักขระและส่งออกค่า ASCII:

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

ผู้ตอบก่อนหน้านี้ได้ตอบคำถามแล้ว แต่ไม่ได้ให้ข้อมูลซึ่งทำให้ฉันคาดหวังได้ ฉันมีวิธีที่ส่งคืนสตริงอักขระหนึ่งตัว แต่ฉันต้องการอักขระที่ฉันสามารถแปลงเป็นเลขฐานสิบหกได้ รหัสต่อไปนี้แสดงให้เห็นถึงสิ่งที่ฉันคิดว่าจะพบโดยหวังว่าจะเป็นประโยชน์ต่อผู้อื่น

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

โค้ดด้านบนจะแสดงสิ่งต่อไปนี้ในหน้าต่างทันที:

a£Δ√

ก 97 61

A3 163 ปอนด์

Δ 916394

√ 8730 221A


2

คุณสามารถลบBOMโดยใช้:

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

1

หรือใน LINQ:

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

0

ฉันต้องการรับค่า ASCII ของอักขระในสตริงใน C #

ทุกคนให้คำตอบในโครงสร้างนี้ ถ้าสตริงของฉันมีค่า "9quali52ty3" ฉันต้องการอาร์เรย์ที่มีค่า ASCII ของอักขระ 11 ตัวแต่ละตัว

แต่ในคอนโซลเราทำงานตรงไปตรงมาดังนั้นเราจึงได้รับถ่านและพิมพ์รหัส ASCII หากฉันผิดดังนั้นโปรดแก้ไขคำตอบของฉัน

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

คำตอบนี้สามารถใช้คำอธิบายเพิ่มเติมได้เล็กน้อย หากคุณมีเพื่อนร่วมงานที่พูดภาษาอังกฤษได้คล่องขึ้นคุณควรขอความช่วยเหลือด้วยความเคารพ
O. Jones

คำอธิบายของฉันง่ายมากเพราะรหัสของฉันง่ายมากโดยไม่มีตัวแปรใด ๆ แต่ใช้แนวคิดง่ายๆว่าจะพิมพ์ค่า ASCII ได้อย่างไรให้แต่ละคนรับถ่านและแปลงถ่านเป็นค่าจำนวนเต็มดังนั้นโปรดใช้สิ่งนี้และหากฉันมีข้อผิดพลาดในคำอธิบายของฉัน โปรดแก้ไขด้วยขอบคุณ
MA Nadeem

0

ทำไมไม่ใช้วิธีง่ายๆแบบเก่า ๆ

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

// ตอนนี้ดีขึ้นแล้ว;)


1
แม้ว่ารหัสนี้อาจช่วยแก้ปัญหาได้รวมถึงคำอธิบายว่าทำไมจึงแก้ปัญหานี้ได้จะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้อย่างแท้จริงและอาจส่งผลให้มีการโหวตเพิ่มขึ้น โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตไม่ใช่แค่คนที่ถามตอนนี้ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายและระบุข้อ จำกัด และสมมติฐานที่ใช้
Dharman

ให้ข้อผิดพลาดในการคอมไพล์: "อักขระที่ไม่คาดคิด" ทั้งสอง `หลังจาก ToString อาจไม่ควรอยู่ที่นั่น
BDL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.