Как получить значение ASCII строки в C #

109

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

Если моя строка имеет значение «9quali52ty3», мне нужен массив со значениями ASCII каждого из 11 символов.

Как я могу получить значения ASCII в C #?

RBS
источник
Вы имеете в виду, что вам нужны только буквенные символы, а не цифры? Значит, вы хотите получить "качество" в результате? Потому что тогда говорить об 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.
Том Блоджет
38
string s = "9quali52ty3";
foreach(char c in s)
{
  Console.WriteLine((int)c);
}
LeppyR64
источник
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 для каждого символа в данной строке
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
byte[] asciiBytes = Encoding.ASCII.GetBytes("Y");
foreach (byte b in asciiBytes)
{
    MessageBox.Show("" + b);
}
кротом
источник
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

163 фунтов стерлингов A3

Δ 916 394

√ 8730 221A

Тони Даллимор
источник
2

Вы можете удалить спецификацию, используя:

//Create a character to compare BOM
char byteOrderMark = (char)65279;
if (sourceString.ToCharArray()[0].Equals(byteOrderMark))
{
    targetString = sourceString.Remove(0, 1);
}
Md Shahzad Adil
источник
1

Или в LINQ:

string value = "9quali52ty3";
var ascii_values = value.Select(x => (int)x);
var as_hex = value.Select(x => ((int)x).ToString("X02"));
ZagNut
источник
0

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

Каждый дает ответ в этой структуре. Если моя строка имеет значение «9quali52ty3», мне нужен массив со значениями ASCII каждого из 11 символов.

но в консоли мы работаем откровенно, поэтому получаем символ и печатаем код ASCII, если я ошибаюсь, поэтому исправьте мой ответ.

 static void Main(string[] args)
        {
            Console.WriteLine(Console.Read());
            Convert.ToInt16(Console.Read());
            Console.ReadKey();
        }
М.А. Надим
источник
В этом ответе можно было бы немного пояснить. Если у вас есть коллега, более свободно говорящий по-английски, с уважением вам следует обратиться за помощью.
О. Джонс
Мое объяснение очень простое, потому что мой код очень прост без каких-либо переменных, но использовал простую концепцию, как можно распечатать значение ASCII, индивидуальное простое получение char и преобразование char в целочисленное значение, поэтому, пожалуйста, вы реализуете это, и если у меня есть ошибка в моем объяснении, поэтому пожалуйста, исправьте это спасибо
MA
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);

// теперь лучше;)

Monarc Dev
источник
1
Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста , измените свой ответ , чтобы добавить объяснения и дать указание о том , что применять ограничения и допущения.
Дхарман
Выдает ошибку компиляции: «Неожиданный символ». Двух `после ToString, вероятно, не должно быть.
BDL,