C # - преобразование строковых данных в фактическое строковое представление - PullRequest
2 голосов
/ 30 июля 2010

У меня есть устройство, которое отправляет строковые данные, представляющие его настройки, но данные кодируются в строке как ее представление в юникоде (?). Например, устройство отправляет строку «00530079007300740065006D», которая представляет строку «Система». Есть ли в C # встроенная функция, которая преобразует строковые данные, отправленные с устройства, в фактическую строку? Если нет, может кто-нибудь посоветовать мне, как лучше всего выполнить это преобразование?

Ответы [ 3 ]

1 голос
/ 30 июля 2010

Это не встроенная функция, но это всего лишь одна строка кода:

string input = "00530079007300740065006D";

String output = new String(Enumerable.Range(0, input.Length/4)
     .Select(idx => (char)int.Parse(input.Substring(idx *  4,4),
           NumberStyles.HexNumber)).ToArray());

Вот еще одна, которая, возможно, немного сложнее в том, чтобы не выполнять хакерский символ/ int cast:

string out2 =
   Encoding.BigEndianUnicode.GetString(Enumerable.Range(0, input.Length/2)
     .Select(idx => byte.Parse(input.Substring(idx * 2, 2),
          NumberStyles.HexNumber)).ToArray());
1 голос
/ 30 июля 2010

В общем и целом, перейдем к победе над решением @Will Dean здесь (так что не отмечайте меня как ответ).

Если вы часто используете решение Will, я предлагаю заключить его в расширение строки:

public static class StringExtensions
{
    public static string HexToString(this string input)
    {
        return new String(Enumerable.Range(0, input.Length/4)
                              .Select(idx => (char) int.Parse(input.Substring(idx*4,4),
                                                              NumberStyles.HexNumber)).ToArray());
    }
}
0 голосов
/ 30 июля 2010

Да, .NET имеет встроенный способ перехода от заданного типа кодирования к другому типу, скажем, UTF8 -> ASCII или что-то подобное. Вам понадобится пространство имен System.Text.Encoding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...