Seek et variable [Résolu]

clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 16 juil. 2007 à 14:37 - Dernière réponse : clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention
- 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)

Merci
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 18 juil. 2007 à 10:13
3
Merci
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.

Merci ctx_man 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de ctx_man
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 16 juil. 2007 à 14:56
0
Merci
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é !!!
Commenter la réponse de ctx_man
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 16 juil. 2007 à 17:05
0
Merci
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
Commenter la réponse de clubberzZ
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 16 juil. 2007 à 17:57
0
Merci
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.
Commenter la réponse de ctx_man
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 17 juil. 2007 à 21:58
0
Merci
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é...

Cordialement
Commenter la réponse de clubberzZ
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 18 juil. 2007 à 10:10
0
Merci
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
Commenter la réponse de ctx_man
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 18 juil. 2007 à 19:33
0
Merci
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!
Commenter la réponse de clubberzZ

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.