IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] convertir un nombre hexa en int


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 94
    Points : 67
    Points
    67
    Par défaut [C#] convertir un nombre hexa en int
    Bonjour,
    j'ai cherché mais je n'arrive pas à trouver
    la fonction standart qui me prendra un nombre en hexa
    #FFFFFF pour le tranformer en entier?

    j'ai essayé int.parse ou bien la classe Convert mais rien ne passe ou je m'y prend mal.....

    merci pour vos suggestions

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    personnellement je n'en connais pas en natif C#
    mais tu peux mener le raisonnement suivant:

    1. partir de la chaine de caractère "FFFFFF"
    2. partir du principe qu'un byte est representé par une chaine de 2 caractères hexadecimaux.
    Voici deux petites fonctions static qui verifient si la longueur d'une chaine de caractères hexadecimaux est paire ou impaire, puis transformant la chaine hexadecimale en paires de caractères hexadecimaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public static bool IsEven(string hexString) 
    { 
      if (hexString.Length % 2 == 0) 
      { return true;} 
      else 
      { return false;} 
    } 
     
    public static string[] ToEvenByteStrings(string hexString) 
    { 
       if (!(IsEven(hexString))) 
       { 
         hexString = "0" + hexString; 
       } 
       int currentChar = 0; 
       int index = 0; 
       int max = hexString.Length; 
       string[] byteStrings = new string[Convert.ToInt32(max / 2) - 1]; 
       while (currentChar < max) 
       { 
         byteStrings(index) = hexString.Substring(currentChar, 2); 
         index += 1; 
         currentChar += 2; 
       } 
       return byteStrings; 
    }
    3. la fonction Uri.FromHex retourne la valeur décimale d'un caractère hexadécimal.
    L'utiliser donc pour nous retourner un byte pour une chaine de 2 caractères hexadecimaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static byte ToByteFromHex(string byteString) 
    { 
       byte byte1 = Convert.ToByte(Uri.FromHex(byteString[0])); 
       byte byte2 = Convert.ToByte(Uri.FromHex(byteString[1])); 
       return Convert.ToByte((byte1 * 16) + byte2); 
    }
    4. Implementer la fonction qui retournera un tableau de byte quelquesoit la longueur de la chaine hexadecimale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public static byte[] BytesFromHex(string hexString) 
    { 
       byte[] bytes = null; 
       int max = hexString.Length; 
       if (max > 0) 
       { 
         if (max == 1) 
         { 
            bytes = new byte[]{ToByteFromHex("0" + hexString)}; 
         } 
        else 
        { 
            int index = 0; 
            string[] byteStrings = ToEvenByteStrings(hexString); 
            bytes = new byte[byteStrings.Length - 1]; 
            foreach (string byteString in byteStrings) 
            { 
                bytes(index) = ToByteFromHex(byteString); 
                index += 1; 
            } 
        } 
      } 
      return bytes; 
    }
    5. Lors de l'utilisation de BytesFromHex, il faudra veiller à la possibilité d'un retour de valeur null en cas de chaine vide passée en paramètre.

    A toi maintenant d'adapter tout ceci en fonction uniquement de tes besoins

    Une autre piste serait d'implementer les méthodes permettant de convertir d'une base vers une autre

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 94
    Points : 67
    Points
    67
    Par défaut
    merci pour ton aide
    c'est étrange qu'il n'existe rien de natif...

  4. #4
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    c'est étrange qu'il n'existe rien de natif...
    Mais si ça existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = int.Parse( "FFFFFF", System.Globalization.NumberStyles.HexNumber );

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Manralf
    c'est étrange qu'il n'existe rien de natif...
    Mais si ça existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = int.Parse( "FFFFFF", System.Globalization.NumberStyles.HexNumber );
    +1 à toi Manralf (je mémorise > save> )

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 94
    Points : 67
    Points
    67
    Par défaut
    merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir un nombre en plusieurs hexa
    Par MrShanky dans le forum Général Java
    Réponses: 14
    Dernier message: 03/06/2014, 13h45
  2. Convertir un nombre d'heure format HH:MM
    Par jerome_sinclair dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2005, 21h51
  3. Comment convertir un nombre de jours décimal en date
    Par Soutou dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/11/2005, 00h57
  4. Réponses: 4
    Dernier message: 06/06/2004, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo