175 votes

Comment convertir des nombres entre l'hexadécimal et le décimal ?

Comment convertir des nombres hexadécimaux en nombres décimaux en C# ?

337voto

Andy McCluggage Points 8583

Pour convertir le décimal en hexadécimal, il faut...

string hexValue = decValue.ToString("X");

Pour convertir l'hexagone en décimal, il faut soit...

int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

ou

int decValue = Convert.ToInt32(hexValue, 16);

2 votes

J'aimerais comprendre comment cette ligne decValue.ToString("X") la convertit en Hex.

26 votes

La variable decValue est de type Int32. Int32 possède une surcharge ToString() qui peut accepter un certain nombre de chaînes de format qui dictent la façon dont la valeur sera représentée sous forme de chaîne. La chaîne de format "X" signifie hexadécimal, de sorte que 255.ToString("X") renverra la chaîne hexadécimale "FF". Pour plus d'informations, voir msdn.microsoft.com/en-us/library/dwhawy9k.aspx

2 votes

Bonne réponse. En fait, j'utilise int.TryParse au lieu de int.Parse pour éviter d'avoir à utiliser l'ennuyeux bloc try catch.

69voto

Jonathan Rupp Points 10900

Hex -> décimal :

Convert.ToInt64(hexString, 16);

Décimal -> Hex

string.Format("{0:x}", intValue);

6 votes

+1 ce qui est bien avec Convert.ToInt64(hexValue, 16); est qu'il effectuera la conversion si le 0x Le préfixe est là ou pas, alors que certaines des autres solutions ne le sont pas.

0 votes

@Craig Bonjour, je dois donc faire la conversion en fonction de la taille de la valeur hexagonale ou je peux appliquer ToInt64 pour toutes les valeurs hexagonales, y a-t-il un impact ?

0 votes

S'il vous plaît, lorsque vous fournissez une solution avec quelque chose qui provient d'un espace de noms spécifique, indiquez de quel espace de noms il s'agit !

29voto

Il semble que vous puissiez dire

Convert.ToInt64(value, 16)

pour obtenir la valeur décimale à partir de la valeur hexadécimale.

L'inverse est vrai :

otherVar.ToString("X");

1 votes

J'obtiens System.FormatException : Le format spécifié 'x' n'est pas valide

1 votes

Cela ne fonctionne que pour les entiers. Si vous voulez convertir un hexagone décimal en décimal ou l'inverse, il y a une erreur.

14voto

Vadym Stetsiak Points 1454

Si vous souhaitez obtenir des performances maximales lors de la conversion de nombres hexagonaux en nombres décimaux, vous pouvez utiliser l'approche avec un tableau prérempli de valeurs hexagonales à décimales.

Voici le code qui illustre cette idée. Mon tests de performance a montré qu'il peut être 20 à 40 % plus rapide que Convert.ToInt32(...) :

class TableConvert
  {
      static sbyte[] unhex_table =
      { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
       ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
      };

      public static int Convert(string hexNumber)
      {
          int decValue = unhex_table[(byte)hexNumber[0]];
          for (int i = 1; i < hexNumber.Length; i++)
          {
              decValue *= 16;
              decValue += unhex_table[(byte)hexNumber[i]];
          }
          return decValue;
      }
  }

0 votes

Génie ! Je me demande s'il est possible de faire en sorte que le compilateur d'octets utilise automatiquement cette approche à l'intérieur de Convert.ToInt32 ?

1 votes

Je ne vois aucune raison de ne pas le faire. Cependant, le maintien du tableau consommera de la mémoire supplémentaire.

5voto

Gopher2011 Points 94

Pour convertir de l'hexadécimal au décimal, il faut soit...

int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

ou

int decValue = Convert.ToInt32(hexValue, 16);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X