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 :

Compteur / décompteur en hexadécimal [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Points : 14
    Points
    14
    Billets dans le blog
    1
    Par défaut Compteur / décompteur en hexadécimal
    Bonjour,

    Après de nombreuse recherche, j'ai baissé les bras. Je cherche a faire un Compteur / décompteur en hexadécimal incrementiel comme celui que j'ai trouve sur internet ici :

    http://www.gecif.net/articles/linux/...xadecimal.html

    Avec un debut et une fin que je choisis ex : de 04A1DB55463E3 à 0B3EB5442DF14 (avec 13 charactères au lieu de 12)

    Je voudrais sauvegarder les resultats avec un resulta par ligne dans un fichier *txt

    Qui peut m'aider ?

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Va falloir être un peu plus précis ; on va pas le faire à ta place non plus.
    Donc montre que tu cherches, que tu tentes, et reviens avec du code, des messages d'erreur, des soucis de conception ou autre mais quelque chose que juste un objectif
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Quelques pistes pour t'aider
    - Ajouter 1 pour incrémenter sachant que 10 = A, 11 = B, etc. jusqu'à 15 = F
    - Récursivité avec un indice pour gérer la profondeur de droite à gauche (car quand tu arrive à F, il faut remettre la valeur à profondeur "X" à 0 et incrémenter la valeur à profondeur "X+1"

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    ça n'existe pas H en hexa (ni G d'ailleurs) si A vaut 10 alors B=11 C=12 D=13 E=14 et F=15 ; arrivé à 16 (en décimal) ça devient 10 (en héxadécimal)

    sinon c'est bien compliqué pour juste faire un compteur (l'hexadécimal c'est juste une représentation différente de décimal ça reste des nombres)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Tout est dit là :

    Citation Envoyé par Sehnsucht Voir le message
    l'hexadécimal c'est juste une représentation différente de décimal ça reste des nombres
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par Kyroon
    Bonjour,

    Tout est dit là :

    Citation Envoyé par Sehnsucht
    l'hexadécimal c'est juste une représentation différente de décimal ça reste des nombres
    Oui, et non...

    La valeur maximal d'un entier en C# est de 9223372036854775807 pour un entier signé ou de 18446744073709551615 pour un entier non signé.
    Donc effectuer la conversion en décimal va fonctionner jusqu'à un certain point.
    En d'autres termes si ton Hexadécimal fait plus de 14 (signé) ou 16 (non signé) caractères, tu sera incapable de le convertir en décimal (même si ça ne semble pas le cas chez toi, mais mieux vaut prévenir que guérir).

    Je rajouterai que la conversion en décimal et vice versa est une option coûteuse (même si ça n'en a pas l'air).

  7. #7
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par popo Voir le message
    Oui, et non...

    La valeur maximal d'un entier en C# est de 9223372036854775807 pour un entier signé ou de 18446744073709551615 pour un entier non signé.
    Donc effectuer la conversion en décimal va fonctionner jusqu'à un certain point.
    En d'autres termes si ton Hexadécimal fait plus de 14 (signé) ou 16 (non signé) caractères, tu sera incapable de le convertir en décimal (même si ça ne semble pas le cas chez toi, mais mieux vaut prévenir que guérir).

    Je rajouterai que la conversion en décimal et vice versa est une option coûteuse (même si ça n'en a pas l'air).
    On ne sait pas ce qu'il y a à compter, mais on peut penser qu'avec un ulong qui va de 0 à 18446744073709551615 il y a de quoi compter pas mal de trucs

    Si ça suffit, aucun besoin de conversion, on manipule des ulong en arrière plan et on gère l'affichage avec ToString("X") (cf. doc)

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    C'est quoi le rapport avec Delphi dans le sujet ?
    Puis quand je lis "coûteux" ça m'horripile toujours autant ; coûteux en temps ? en mémoire ? en bande passante ? dans quel contexte ? bref on s'en fout que ça puisse être coûteux dans certaines circonstances si c'est pas les nôtres concrètement.
    C'est bien pour ça que dans l'ordre, on développe une solution en accord avec le cahier des charges (et là j'ai vu aucune info sur une question de coût donc je m'en soucie pas), on la teste, on détecte un souci de "coût" pénalisant, on profile, on analyse et on s'adapte ; dans cet ordre.

    Et puis c'est marrant de s'enquiquiner quand 9223372036854775807L.toString ("X") suffit ; et si c'est plus grand ben entre ulong ou decimal on a déjà de quoi faire ; au pire y'a double avec peut-être des petites fioritures rapport à la précision flottante et dans tous les cas y'a BigInteger ou là on est seulement limité par la mémoire
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Membre à l'essai

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Points : 14
    Points
    14
    Billets dans le blog
    1
    Par défaut Ce que j'ai fait
    bonsoir,

    Comme toujours pas de solution simple, j'ai fait des textbox avec le c# suivant dans un timer :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Directory.CreateDirectory("C:\\Mon Dossier");
     
    textBoxtotal.Text = textBox100.Text + textBox101.Text + textBox102.Text + textBox103.Text + textBox104.Text + textBox105.Text + textBox106.Text +
                textBox107.Text + textBox108.Text + textBox109.Text + textBox110.Text + textBox111.Text + textBox112.Text + textBox113.Text + textBox114.Text +
                textBox115.Text + textBox116.Text + textBox117.Text + textBox118.Text +
                textBox7.Text + textBox6.Text + textBox5.Text + textBox4.Text + textBox3.Text + textBox2.Text + textBox1.Text;
     
     
                using (System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\Mon Dossier\\ListeClés.txt", true))
                {
                    file.WriteLine(textBoxtotal.Text);
                }
                richTextBox1.Multiline = true;
                richTextBox1.Text += Environment.NewLine + textBoxtotal.Text;
    Directory.CreateDirectory("C:\\Mon Dossier");
                int t1 = Int32.Parse(textBox1.Text, System.Globalization.NumberStyles.HexNumber);
                int t2 = Int32.Parse(textBox2.Text, System.Globalization.NumberStyles.HexNumber);
                int t3 = Int32.Parse(textBox3.Text, System.Globalization.NumberStyles.HexNumber);
                int t4 = Int32.Parse(textBox4.Text, System.Globalization.NumberStyles.HexNumber);
                int t5 = Int32.Parse(textBox5.Text, System.Globalization.NumberStyles.HexNumber);
                int t6 = Int32.Parse(textBox6.Text, System.Globalization.NumberStyles.HexNumber);
                int t7 = Int32.Parse(textBox7.Text, System.Globalization.NumberStyles.HexNumber);
     
                if (t1 < 0xFF)
                {
                    t1++;
                    textBox1.Text = string.Format("{0:X2}", t1);
                }
                else
                {
                    t1 = 00;
                    textBox1.Text = string.Format("{0:X2}", t1);
                    if (t2 < 0xFF)
                    {
                        t2++;
                        textBox2.Text = string.Format("{0:X2}", t2);
                    }
                    else
                    {
                        t2 = 00;
                        textBox2.Text = string.Format("{0:X2}", t2);
                        if (t3 < 0xFF)
                        {
                            t3++;
                            textBox3.Text = string.Format("{0:X2}", t3);
                        }
                        else
                        {
                            t3 = 00;
                            textBox3.Text = string.Format("{0:X2}", t3);
                            if (t4 < 0xFF)
                            {
                                t4++;
                                textBox4.Text = string.Format("{0:X2}", t4);
                            }
                            else
                            {
                                t4 = 00;
                                textBox4.Text = string.Format("{0:X2}", t4);
                                if (t5 < 0xFF)
                                {
                                    t5++;
                                    textBox5.Text = string.Format("{0:X2}", t5);
                                }
                                else
                                {
                                    t5 = 00;
                                    textBox5.Text = string.Format("{0:X2}", t5);
                                    if (t6 < 0xFF)
                                    {
                                        t6++;
                                        textBox6.Text = string.Format("{0:X2}", t6);
                                    }
                                    else
                                    {
                                        t6 = 00;
                                        textBox6.Text = string.Format("{0:X2}", t6);
                                        if (t7 < 0xFF)
                                        {
                                            t7++;
                                            textBox7.Text = string.Format("{0:X2}", t7);
                                        }
     
                                        using (System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\Mon Dossier\\ListeClés.txt", true))
                                        {
                                            file.WriteLine(textBoxtotal.Text);
                                        }
                                        richTextBox1.Multiline = true;
                                        richTextBox1.Text += Environment.NewLine + textBoxtotal.Text;
                                    }
                                }
                            }
                        }
                    }
                }
    Je sais, c'est compliqué pour rien .. mais ca fonctionne ... Si vous avez plus simple : 1 seul text box avec possibilité d'incrémenter de +1 ,+2 ...au choix en hexa avec un total de 14 caractère, je prends ..............

  10. #10
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Un NumericUpDown pour le nombre avec sa propriété Hexadecimal à true ; un second pour l'increment (+1 +2) ou une combobox si tu ne souhaites que certaines valeurs prédéfinies et c'est globalement tout (optionnellement quelques fioritures de paramétrages ; MinValue, MaxValue etc.)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  11. #11
    Membre à l'essai

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Points : 14
    Points
    14
    Billets dans le blog
    1
    Par défaut Numerique box
    bonsoir,

    avec une Numerique box ca ne fonctionne pas.

    Par contre, comme cela semble compliqué, j'ai opté pour la solution de ré-ouvrir de fichier dans une riche textbox.

    Une fois celui ci ré-ouvert, qui sais comment suprrimer les lignes de que je ne veux pas ?

  12. #12
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    C'est quoi le rapport avec Delphi dans le sujet ?
    Puis quand je lis "coûteux" ça m'horripile toujours autant ; coûteux en temps ? en mémoire ? en bande passante ? dans quel contexte ? bref on s'en fout que ça puisse être coûteux dans certaines circonstances si c'est pas les nôtres concrètement.
    C'est bien pour ça que dans l'ordre, on développe une solution en accord avec le cahier des charges (et là j'ai vu aucune info sur une question de coût donc je m'en soucie pas), on la teste, on détecte un souci de "coût" pénalisant, on profile, on analyse et on s'adapte ; dans cet ordre.

    Et puis c'est marrant de s'enquiquiner quand 9223372036854775807L.toString ("X") suffit ; et si c'est plus grand ben entre ulong ou decimal on a déjà de quoi faire ; au pire y'a double avec peut-être des petites fioritures rapport à la précision flottante et dans tous les cas y'a BigInteger ou là on est seulement limité par la mémoire
    Aucun rapport avec Delphi, le seul endroit où y'a marqué Delphi c'est dans ma signature et sous mon avatar.
    Le terme n’apparaît nulle part dans le post.

    On parle de conversion d'hexadécimal (une chaîne) vers un décimal
    Alors si tu t'arrête de t'exciter pour un rien et que tu réfléchis deux secondes, il devient évident que le parcours de la chaîne et son analyse va demander de la ressource CPU.

    En accord avec le cahier des charges...
    En relisant bien, tu remarqueras que j'ai précisé que la solution de la conversion pouvait suffire dans ce cas là mais qu'il serait limité en nombres de caractères s'il devait y en avoir plus.
    Je t'accorde que je n'avais pas pensé à BigInteger où la conversion fonctionnera dans tous les cas (sauf problème mémoire).

    Que ce soit ulong, decimal ou double, on finir forcément par atteindre la valeur max à un moment.
    Reste, en effet le BigInteger ou plus exactement BigNumber parce que les méthodes Parse et ToString de BigInteger font en réalité appel à celles de BigNumber où la limite est celle de la mémoire.
    Et en y regardant de plus près on s’aperçoit que non seulement on boucle sur tout la chaîne au départ pour convertir en décimal mais également au retour sur tout les chiffres pour la reconversion en hexadécimal.
    Bref, cette solution fonctionne parfaitement dans son cas et pour les contraintes qu'il n'a pas (et nulle part, je n'affirme le contraire).
    Mais si je devais privilégier la performance, et ce même si C# n'implémente pas la récursion terminale (quoi qu'on peut s'en sortir avec la méthode du trampoline), je préférerais une approche récursive car je n'aurais pas besoin de tout parcourir à chaque fois. Et en plus, ça me ferait un bon exercice.

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

Discussions similaires

  1. [PB CONCEPTUEL] avec compteur/trigger
    Par kase74 dans le forum SQL
    Réponses: 6
    Dernier message: 25/03/2004, 11h02
  2. Fonction de conversion de COLORREF en hexadécimal?
    Par charliejo dans le forum MFC
    Réponses: 4
    Dernier message: 21/02/2004, 18h25
  3. Remise à 0 d'un compteur automatique
    Par missllyss dans le forum SQL
    Réponses: 4
    Dernier message: 15/12/2003, 16h46
  4. question sur l'hexadécimal
    Par Adrael dans le forum C
    Réponses: 9
    Dernier message: 12/06/2003, 19h00
  5. Migration Access > SQL Server (suite) : Compteur
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2003, 14h08

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