Як отримати значення ASCII рядка в C #


108

Я хочу отримати значення символів ASCII в рядку на C #.

Якщо мій рядок має значення "9quali52ty3", я хочу масив зі значеннями ASCII кожного з 11 символів.

Як я можу отримати значення ASCII в C #?


Ви маєте на увазі, що хочете лише алфавітні символи, а не цифри? Тож ви хочете в результаті "якості"? Тому що тоді говорити про ASCII мало сенсу.
Lars Truijens

Я хочу, щоб Ascii кожного символу з цього рядка, Ascii цифр, а також ascii слова "якість"
RBS

Що ви маєте на увазі, що вам потрібно числове значення ASCII кожного символу в рядку, припускаючи, що вся рядок може бути представлена ​​в ASCII. Ваші нинішні формулювання дуже заплутані.
bzlm

Відповіді:


189

Від MSDN

string value = "9quali52ty3";

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

Тепер у вас є масив значення ASCII байтів. Я отримав наступне:

57 113 117 97 108 105 53 50 116 121 51


Це показує мені System.Byte []. Потрібно провести цикл через символи у слові. Не впевнений, як ти змусив це працювати. Допомогла ОП, хоча це важливо.
NikosV

Примітка: Encoding.ASCIIвиконано з можливістю випромінювати модуль коду ASCII для символу заміни ('?') Для символів, які відсутні в наборі символів ASCII. Інші параметри - включаючи викидання виключень - доступні в Encodingкласі. І, звичайно, доступні й інші кодування символів - особливо UTF-8; Слід запитати, чи є насправді розшукуваним ASCII.
Том Блоджет

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

8

Ви маєте на увазі, що хочете лише алфавітні символи, а не цифри? Тож ви хочете в результаті "якості"? Ви можете використовувати 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 для кожного charter в заданому рядку
mahesh

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

Якщо я пам'ятаю правильно, значення ASCII - це число нижніх семи біт числа Unicode .


3

Якщо ви хочете отримати код для кожного символу в рядку, ви можете зробити щось подібне:

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


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£Δ√

a 97 61

£ 163 A3

Δ 916 394

√ 8730 221А


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

Ця відповідь могла використовувати трохи більше пояснень. Якщо ви маєте колегу, яка більше володіє англійською мовою, з повагою вам слід попросити допомоги.
О. Джонс

моє пояснення дуже просте, тому що мій код дуже простий без будь-яких змінних, але використовується проста концепція, як можна надрукувати значення ASCII окремо, просто отримати знак та перетворити діаграму в ціле значення, тому, будь ласка, ви реалізуєте це, і якщо у мене є помилка в моєму поясненні, так будь ласка, виправте це завдяки
М. А. Надеем,

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
Хоча цей код може вирішити питання, включаючи пояснення, як і чому це вирішує проблему, справді допоможе покращити якість вашої публікації та, ймовірно, призведе до збільшення кількості голосів. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, а не лише про людину, яка зараз задає питання. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення та вказати, які обмеження та припущення застосовуються.
Дхарман

Подає помилку компіляції: "Несподіваний символ". Два 'після ToString, ймовірно, не повинні бути там.
BDL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.