Проверьте это
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);