Необходимо преобразовать значение ASCII в шестнадцатеричное значение - PullRequest
2 голосов
/ 25 апреля 2010

Мне нужно преобразовать ascii в шестнадцатеричные значения.См. Таблицу Ascii, но у меня есть несколько примеров, перечисленных ниже:

  • ascii 1 = 31
  • 2 = 32
  • 3 = 33
  • 4 = 34
  • 5 = 35
  • A = 41
  • a = 61 и т. Д.

Но я использую int вместо строковых значений,Возможно ли это сделать?Поэтому int test = 12345;Нужно получить конвертированный я = 3132333435

Ответы [ 3 ]

6 голосов
/ 25 апреля 2010

Проверьте это

string input = "12345";
string hex = string.Join(string.Empty,
    input.Select(c => ((int)c).ToString("X")).ToArray());

Console.WriteLine(hex);

Примечание: в C # 4 вызов .ToArray () не требуется, поскольку метод string.Join был перегружен для приема IEnumerable<T>.

Вышеуказанное будет работать для реального ASCII, потому что первые 128 кодовых точек UTF16 (кодировка, используемая в типе string C #) имеют те же числовые значения, что и для ASCII, и, таким образом, приводят значение C # char к int в порядке. Однако часто то, что описывается как «ASCII», на самом деле является некоторой кодовой страницей ANSI (в США обычно это кодовая страница 1252, «западноевропейская (Windows») », которая имеет 256 кодовых точек, вторые 128 не имеют тех же значений, что и используется в UTF16.

Если вы имеете дело с этим или любой другой кодовой страницей по этому вопросу, и у вас есть текст в виде C # string, вы можете применить ту же технику, что и выше, за исключением использования класса Encoding для преобразования C # string объект в byte[] перед преобразованием в шестнадцатеричный:

string input = "12345";
// Replace 1252 with whatever code page you're using, if not that one
string hex = string.Join(string.Empty,
    Encoding.GetEncoding(1252).GetBytes(input).Select(b => b.ToString("X")).ToArray());

Console.WriteLine(hex);
0 голосов
/ 25 апреля 2010

Похоже на решение Энтони Пеграма, но больше LINQ'ish и чуть короче, но медленнее из-за многократного выделения строк в агрегатном методе.

string hex = input.Select(c => ((int)c).ToString("X")).Aggregate((a, s) => a + s);
0 голосов
/ 25 апреля 2010

Конвертировать Char в ASCII

int c = (int)'a';
...