Test cette
string input = "12345";
string hex = string.Join(string.Empty,
input.Select(c => ((int)c).ToString("X")).ToArray());
Console.WriteLine(hex);
Note: en C# 4, l'appel à .ToArray() n'est pas nécessaire parce que la méthode string.Join a été surchargée pour accepter IEnumerable<T>
.
Le ci-dessus fonctionnera pour ASCII réel, car les 128 premiers points de code de UTF16 (le codage utilisé dans le type C# 's string
) ont les mêmes valeurs numériques que pour ASCII, et ainsi la coulée de la valeur C# char
à int
est très bien. Cependant, souvent ce qui est décrit comme "ASCII" est vraiment une page de code ANSI (aux États-Unis, généralement code 1252, "Western European (Windows"), qui a 256 points de code, le second 128 n'ayant pas les mêmes valeurs utilisé dans UTF16.
Si vous faites affaire avec cela, ou toute autre page de code pour cette question, et vous avez le texte comme C# string
, vous pouvez appliquer la même technique que ci-dessus, à l'exception en utilisant la classe Encoding
pour convertir l'objet C# string
à un byte[]
avant de convertir en hexadécimal:
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);
Pourquoi voulez-vous faire cela? –
J'ai besoin de convertir ascii en hex mais la valeur acii est int et pas une chaîne ou un char. Ceci est requis pour un périphérique matériel qui a besoin des données en hexadécimal –