Convertir : (char *) -> (int *) [C ANSI]

Convertir : (char *) -> (int *) [C ANSI] - C - Programmation

Marsh Posté le 18-09-2004 à 16:16:43    

Je dois faire un programme où l'utilisateur doit rentrer des octets en hexadécimal en paramètre dans le main (**argc).
 
Donc ce qui se trouve dans argc, c'est des caractères que je dois faire rentrer dans un tableau de int, le problème c'est que je dois non seulement convertir les char en int, mais en plus il faut faire la conversion en hexadécimal.
 
Par exemple si l'utilisateur rentre : FF 01, je dois retrouver 255 dans la première case du tableau int et 1 dans la deuxième case.
 
Es que quelqu'un à une idée ?
 
PS : En utilisant que du C.

Reply

Marsh Posté le 18-09-2004 à 16:16:43   

Reply

Marsh Posté le 18-09-2004 à 16:17:34    

strtol / stroul

Reply

Marsh Posté le 18-09-2004 à 16:21:53    

Taz ->
 
Ok, merci beaucoup, mais le problème qui se pose, c'est que sa va convertir l'hexa en décimal.
 
Il existe pas une fonction qui fait sa ?
 
Parce que si je rentre FF il va mettre quoi comme valeur dans le première case ?

Reply

Marsh Posté le 18-09-2004 à 16:23:37    

t'as regardé ce que ça fait strtol ?
 
ou alors faut le dire tout de suite si t'es le genre de débutant qui crois que 0xA n'est la égal à 10 décimal ?

Reply

Marsh Posté le 18-09-2004 à 16:26:35    

Taz ->
 
Ouai sa ok mais si je met 55, il va me mettre 55 dans la première case et non pas 170.

Reply

Marsh Posté le 18-09-2004 à 16:28:46    

c'est quoi une case ?

Reply

Marsh Posté le 18-09-2004 à 16:31:40    

Taz ->
 
Je dis une case en supposant que tu converti dans un tableau de int.
 
Et donc si tu as une chaine qui est "55",
sa va te donner 55 une fois converti en int.
 
Sauf que moi je veux qu'il y ai 170 puisque "55" c'est de l'hexa.

Reply

Marsh Posté le 18-09-2004 à 16:33:25    

0x55 ça fait pas 170 en base 10 ...
 
donc confirmation : t'es bien le deuxième type que j'ai décrit
 
 
--
 
pâture ...
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char* argv[])
  4. {
  5.   while(*++argv)
  6.     {
  7.       printf("%d\n", (int)strtoul(*argv, NULL, 16));
  8.     }
  9.   return 0;
  10. }


 

Reply

Marsh Posté le 18-09-2004 à 16:36:12    

Taz ->
 
Autant pour moi c'est par là j'était sur 0xAA = 170
 mais 0x55 sa fait 85 et dans ton int * tu va récupérer quoi ?
 
(55 ou 85 ?)

Reply

Marsh Posté le 18-09-2004 à 16:37:04    

comme je t'ai déjà dit 0x55 est 85

Reply

Marsh Posté le 18-09-2004 à 16:37:04   

Reply

Marsh Posté le 18-09-2004 à 16:39:22    

Taz ->
 
Sa je sais, mais donc sa veut dire que l'utilisateur doit rentrer "0x55" et non "55" ?
 
Ma question en faite c'est es que si rentre "0x55", sa fait bien la conversion en hexa ?

Reply

Marsh Posté le 18-09-2004 à 16:46:26    

Taz ->
 
Merci beaucoup sa marche niquel (désolé j'avais pas vu le radix permettant de changer la base).
 
1000 merci.

Reply

Marsh Posté le 18-09-2004 à 16:46:27    

c'est quand tu veux pour te mettre au boulot
 
tu lis le 'man strtol' tu testes le programmes que je t'ai donné et tu reviens pas avant d'avoir fait ça

Reply

Marsh Posté le 18-09-2004 à 16:47:23    

Taz ->
 
C'est bon merci sa fonction, désolé pour le radix.
 
Encore merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed