2010-04-25 7 views
2

J'ai besoin de convertir ASCII en valeurs hexadécimales. Se référer à la table ASCII mais j'ai quelques exemples énumérés ci-dessous:Besoin de convertir la valeur ASCII en valeur hexadécimale

  • ascii 1 = 31
  • 2 = 32
  • 3 = 33
  • 4 = 34
  • 5 = 35
  • a = 41
  • a = 61 etc

Mais je suis nous int int au lieu de valeurs de chaîne. Est-il possible de faire ça. Par conséquent int test = 12345; Besoin d'obtenir la conversion i = 3132333435

+0

Pourquoi voulez-vous faire cela? –

+0

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 –

Répondre

6

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); 
0

Convertir Char en ASCII

int c = (int)'a'; 
+0

Désolé de faire des modifications à la question elle-même –

+0

Besoin de convertir ascii en hexadécimal –

+0

int hex = digit + 0x30; –

0

similair à la solution d'Anthony Pegram, mais plus LINQ'ish et un peu plus courte, mais plus lent du à plusieurs allocations de chaînes dans la méthode agrégée.

string hex = input.Select(c => ((int)c).ToString("X")).Aggregate((a, s) => a + s); 
+0

Merci pour la bonne solution. –

Questions connexes