Cela semble être un problème facile mais je ne peux pas comprendre.
J'ai besoin de convertir ce caractère < en octet (représentation hexadécimale), mais si j'utilise
byte b = Convert.ToByte('<');
j'obtiens 6 (représentation décimale) au lieu de c.
60 == 0x3C
.
Vous avez déjà votre bonne réponse, mais vous la regardez dans le mauvais sens.
0x
est le préfixe hexadécimal3C
est 3 x 16 + 12
Vous pouvez utiliser le BitConverter.ToString
méthode pour convertir un tableau d'octets en chaîne hexadécimale:
string hex = BitConverter.ToString(new byte[] { Convert.ToByte('<') });
ou simplement:
string hex = Convert.ToByte('<').ToString("x2");
obtenez 60 (représentation décimale) au lieu de 3c.
Non, vous n'avez aucune représentation. Vous obtenez un byte
contenant la valeur 60/3c dans une représentation interne . Lorsque vous le regardez , c'est-à-dire lorsque vous le convertissez en chaîne (explicitement avec ToString()
ou implicitement), vous obtenez le représentation décimale 6.
Ainsi, vous devez vous assurer que vous explicitement convertissez l'octet en chaîne, en spécifiant la base que vous voulez. ToString("x")
, par exemple, convertira un nombre en une représentation hexadécimale:
byte b = Convert.ToByte('<');
String hex = b.ToString("x");
char ch2 = 'Z';
Console.Write("{0:X} ", Convert.ToUInt32(ch2));
Vous voulez convertir la valeur numérique en hexadécimal en utilisant ToString("x")
:
string asHex = b.ToString("x");
Cependant, sachez que le code pour convertir le caractère "<" en octet fonctionnera pour ce caractère particulier, mais il ne fonctionnera pas pour les caractères non ANSI (qui ne rentrent pas dans un octet).