clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 2007
-
16 juil. 2007 à 14:37
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 2007
-
18 juil. 2007 à 19:33
Bonjour à tous,
Voilà mon problème, j'aimerais écrire un seek avec une variable dans le genre "fs.Seek(0x + variable, SeekOrigin.Begin)", mais je ne trouve pas la bonne syntaxe pour le faire, quelqu'un serait-il faire ceci? (Je précise que "variable" est un nombre)
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 18 juil. 2007 à 10:13
petite correction dans le second code (j'ai taper trop vite désolé)
string MonNombre = MaTextBox.Text.Trim(); //Supprime les espaces
int MonNombreConvertit;
if(MonNombre.StartWith("0x") == true) //Si ta chaine commence par 0x
MonNombreConvertit = Convert.ToInt32(MonNombre.Remove(0, 2), 16); //Supprime le prefixe avant convertion en héxadécimal
else
MonNombreConvertit = Convert.ToInt32(MonNombre[, 10]); //Sinon, on convertit en décimal
J'ai mit le ", 10" entre [ ] car il est optionnel, si tu ne spécifie pas de base, c'est la base 10 (décimal) par défaut.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 16 juil. 2007 à 14:56
Salut !
Pourquoi tu veux ajouter 0x ? Ce préfix ne fait pas parti d'un chiffre, il sert juste à indiquer que le nombre qui le suis est sous sa forme hexadécimale. Par exemple, 14 et 20 sont deux nombres différents, mais 14 est également l'equivalent hexadécimale de 20. Comment différencier ces deux valeur de 14 ? En mettant le préfix. 0x14 est bien différent de 14.
Par conséquent, si tu veux te déplacer de 20 octets tu peux faire soit fs.Seek(20, SeekOrigin.Begin); Soit fs.Seek(0x14, SeekOrigin.Begin);
donc : i20; //Ou i 0x14;
fs.Seek(i, SeekOrigine.Begin
Visual Studio t'affiche par défaut les valeurs en décimal, donc si tu début, la valeur de "i" sera toujours 20. Mais tu as une petite icone "Hex" pour afficher en héxadécimale, dans ce cas, ta valeur sera toujours 0x14.
Le travail c'est la santé, ne rien faire c'est la préservé !!!
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 16 juil. 2007 à 17:05
J'ai ce préfix car je dois aller à l'offset 0x1299 par exemple d'une .dll. J'aimerais que le chiffre que j'ai obtenu en variable par l'utilisateur, qui est 1299 soit toujours sous forme hexadécimal, est-ce possible? Merci pour votre explication
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 16 juil. 2007 à 17:57
Si ta variable est un nombre, aucune conversion n'est nécéssaire, c'est automatique. Cependant, si c'est une entrée utilisateur, tu recoit une chaine de texte que tu convertit via System.Convert.ToInt32 ou quelque chose s'en approchant. Le but ici c'est de dire à ton convertisseur string->int que le nombre en entrée est sous sa forme hexadécimale.
Pour information, "Hexa" signifie 6 (hexagone), "déc" signifie 10 (décade).
Nous, pauvre humains au cerveau limité, comptons en base 10 aussi nommée "décimale". C'est plus pratique pour nous. Celà signifie qu'on compte de 0-9 avant d'ajoute un chiffre supplémentaire.
La base Hexadécimale c'est donc la base 16.
Maintenant que tu sais celà, en regardant la documentation de "int Convert.ToInt32(string value, int fromBase)" tu devrais pouvoir te passer de ce préfix.
Vous n’avez pas trouvé la réponse que vous recherchez ?
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 17 juil. 2007 à 21:58
Il n'éxiste pas de méthode avec le préfixe alors?
En tout cas merci pour le coup de pouce, si vous pouviez me mettre un exemple, je suis totalement largué...
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 18 juil. 2007 à 10:10
Salut !
Petit cours :
La notation 0x d'un nombre n'est que pour nous humains, car on est trop con pour faire la différence. Comme les compilateurs on été fait par des humains, eux aussi sont trop con pour faire la différence. Il existe beaucoup de prefix/suffixe aux nombre pour indiquer aux humains/compilateurs en quelle base il faut compter. Mais une fois en mémoire, le processeur s'en tape complet de la base dans laquelle tu veux lire/ecrire. Lui, il fait la différence (ou plus exactement, le compilateur s'est démerder pour tout lui traduire dans la seule base qu'il connait : la base 2, le binaire). Cependant un nombre est un nombre, il a une valeur. Tu peux l'afficher comme tu veux ca change pas sa valeur. Quand tu fait un chèque, tu écrit le montant en chiffre, puis en toute lettres. La valeur de ces deux montant est bien identiques non ? Pourtant ils s'écrivent pas pareil. C'est le même principe.
Imaginons que tu utilisateur entre un nombre dans une textbox. Le nombre qu'il va entrer sera sous la forme d'une chaine. ("1234", c'est bien une chaine, pas un nombre, si tu fait "1234" + "1234", ca te donnera pas "2468" mais "12341234"). C'est un humain qui a entrer la chaine. A toi de savoir dans quelle base il l'a entrée. Tu peux considérer qu'il la entrée en hexadécimal, ou qu'il la entrer en décimal. Puisque c'est toi qui décide, pas besoin de préfixe/suffixe. Exemple :
int offset = Convert.ToInt32(MonTextBox.Text, 16);
Avec ce code, que l'utilisateur ai tapé "123", "AB45" ou encore "Salut les gars", ton programme considère que c'est de l'hexadécimal. Si il arrive pas a convertir, c'est que l'utilisateur à entrer n'importe quoi.
Si tu tient tant que ca a ton préfixe, tu peux en "créer" un. C'est à dire que tu scanne ta chaine a la recherche d'un préfix afin de connaitre la base de convertion :
string MonNombre = MaTextBox.Text.Trim(); //Supprime les espaces
int MonNombreConvertit;
if(MonNombre.StartWith("0x") == true) //Si ta chaine commence par 0x
MonNombreConvertit = Convert.ToInt32(MonNombre.Remove(0, 2)); //Supprime le prefixe avant convertion en héxadécimal
else
MonNombreConvertit = Convert.ToInt32(MonNombre); //Sinon, on convertit en décimal
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 18 juil. 2007 à 19:33
Merci d'avoir pris la peine d'expliquer entièrement la méthode à suivre, je vous en remercie, j'ai opter pour la première solution et tout marche parfaitement!