Преобразование многочисленных значений ASCII (в строковой форме) в читаемый текст C # - PullRequest
0 голосов
/ 01 сентября 2018

По сути, я пытаюсь сделать то же самое, что и код Python, приведенный ниже, только в C #.

Пользователь предоставит длинный список значений ASCII, разделенных запятыми, например, «104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100», и я хочу преобразовать их для читаемого текста и вернуть эту информацию в текстовое поле. Чувствую, что я делаю это намного сложнее, чем должно быть. Любая помощь очень ценится, спасибо!

decodeText = userInputBox.Text;
var arr = new string[] { decodeText};

int[] myInts = Array.ConvertAll(arr, int.Parse);

for(int i = 0; i < myInts.Length; i++)
{
    decodeBox.Text = not sure??
}

Пример Python:

L = [104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100] '' .Join (карта (CHR, L)) 'привет, мир'

Как мне преобразовать список значений ascii в строку в python?

Ответы [ 6 ]

0 голосов
/ 01 сентября 2018

Поскольку вы только что вошли в c #, вам нужен код, который вы можете понять.

public class Program
{
    static void Main(string[] args)
    {
        string input = "104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100";

        String output = String.Empty;

        foreach (var item in input.Split(',').ToArray())
        {
            int unicode = Convert.ToInt32(item);
            var converted = char.ConvertFromUtf32(unicode);
            output += converted;
        }

        Console.WriteLine(output);
        Console.ReadLine();
    }
}

ConvertFromUtf32 (int utf32): Преобразует указанную кодовую точку Unicode в строку в кодировке UTF-16.

Выход:

enter image description here

0 голосов
/ 01 сентября 2018

Прямо вперед:

var data = new byte[]{104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100};
var str = Encoding.ASCII.GetString(data);

. Пример скрипта .net

Если вам нужно преобразовать данные из текстового ввода, вам нужно преобразовать это

var input = "104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100";
var data = Array.ConvertAll( 
    input
        .Split(',')
        .Select( e => e.Trim() )
        .ToArray(),
    Byte.Parse );
var str = Encoding.ASCII.GetString(data);

. Пример скрипта .net

0 голосов
/ 01 сентября 2018

Я верю, что с первой попытки вы справились с этой задачей:

var arr = userInputBox.Text.Split(‘,’);
textbox.Text = new string(Array.ConvertAll(arr, s => (char)(int.Parse(s)));

Там, где вы использовали convertall, чтобы изменить массив строк на массив int, я добавил приведение к char, чтобы вместо него выводился массив символов (я объясню почему ниже), и это можно преобразовать в строку с помощью передавая его в конструктор новой строки

Это привело к гораздо более компактной (и я мог бы сделать ее одной строкой, если честно) форме, но компактность не всегда желательна с точки зрения обучения

Следовательно, это исправляет ваш код, если его легче понять:

decodeText = userInputBox.Text;
var arr = decodeText.Split(‘,’);

int[] myInts = Array.ConvertAll(arr, int.Parse);

for(int i = 0; i < myInts.Length; i++)
{
    decodeBox.Text += (char)myInts[i];
}

Ключевым битом, который вам не хватало (кроме использования разбиения строки для разделения строки на массив числовых строк), было преобразование целого числа в символ

В c # есть прямое отображение от int до буквы A, например, 65, и если вы берете int 65 и приводите его к символу, с (char) он становится A

Тогда мы просто добавим это

Если список целых будет длинным, рассмотрите возможность использования строителя строк для построения вашей строки

0 голосов
/ 01 сентября 2018

Вам нужно разделить входные данные на ,, затем проанализировать номер строки в вещественное число и привести его к типу char, а затем создать строку, используя char[] ctor.

var result = new string(userInputBox.Text.Split(',').Select(c => (char)int.Parse(c)).ToArray());
0 голосов
/ 01 сентября 2018

Если у вас есть массив ints:

int[] asciis = new []{104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100};

Легко преобразовать их в массив chars с помощью Linq:

var chars = asciis.Select(i=>(char)i).ToArray();

А затем к строковому представлению (к счастью, у нас есть строковый конструктор, который это делает):

var text = new string (chars);
0 голосов
/ 01 сентября 2018
String finalString = String.Empty;

foreach(var item in myInts)
{
   int unicode = item;
   char character = (char) unicode;
   string text = character.ToString();
   finalString += text;
}

Если вы хотите немного повысить производительность с помощью String Builder.

StringBuilder finalString = new StringBuilder();

foreach(var item in myInts)
{
   char character = (char) item;
   builder.Append(character)
}
...