web-dev-qa-db-fra.com

C # Convert Char en octet (représentation hexadécimale)

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.

23
DropTheCode

60 == 0x3C.

Vous avez déjà votre bonne réponse, mais vous la regardez dans le mauvais sens.

0x est le préfixe hexadécimal
3C est 3 x 16 + 12

23
Henk Holterman

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");
16
Darin Dimitrov

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");
5
Heinzi
char ch2 = 'Z';
Console.Write("{0:X} ", Convert.ToUInt32(ch2));
4
cc4re

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).

3
Matthew Watson