Aller au contenu

Messages recommandés

Posté(e)

Bonjour à vous tous ici présents.

une vielle routine qui convertit du decimal à l'hexa :

 

 (defun Dec2Hex (Num / HexVal TmpNum TmpVal) (setq HexVal "" TmpNum Num ) (while (< 0 TmpNum) (setq TmpVal (rem TmpNum 16) HexVal (strcat (if (< TmpVal 10) (chr (+ 48 TmpVal)) (chr (+ 55 TmpVal)) ) HexVal ) TmpNum (/ TmpNum 16) ) ) HexVal )

 

modifié legerement pour obtenir une autre variable var3 tout en gardant HexVal :

 

 (defun Dec2Hex (Num / HexVal TmpNum TmpVal) (setq HexVal "" TmpNum Num ) (while (< 0 TmpNum) (setq TmpVal (rem TmpNum 16) (progn HexVal (setq var3 HexVal)) (strcat (if (< TmpVal 10) (chr (+ 48 TmpVal)) (chr (+ 55 TmpVal)) ) HexVal ) TmpNum (/ TmpNum 16) ) ) (progn HexVal (setq var3 HexVal))  )

 

que j'utilise à l'interieur d'un code du genre :

 

(dec2Hex var2) où "var2" est un entier recupéré par (setq var2 (atoi (substr var1 1 3))) var1 est une chaine.

 

il me sort "erreur:type d'argument incorrect: stringp 0"

 

Je pense que ça coince au niveau de cette fonction dec2Hex car quand je tape !var3 ca me donne nil et quand je retappe le même code càdire (dec2Hex var2) ca marche et var3 contient la valeur juste.

 

je me demande ce problème est du à quoi?

merci

Posté(e)

Salut,

 

La modification que tu as faite génère une erreur :

 

erreur: nom de la variable incorrect dans SETQ: (PROGN HEXVAL (SETQ VAR3 HEXVAL))

 

Je ne comprends pas ce que tu veux dire par "tout en gardant HexVal ".

Il s'agit d'une variable locale qui revient donc à nil après l'exécution de la routine.

 

En conservant la routine originale, tu peux tout simplement faire :

 

(setq var2 (dec2hex var2))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

effectivement, vous avez raison, j'ai rectifié et fait comme vous avez indiqué

 

 (defun c:zzz ()
(setq var1 "25659854752158"
     var2 (atoi (substr var1 1 3))
)
(setq var3 (dec2Hex var2))
)
(defun dec2Hex (INum / TmpNum TmpVal)
(setq HexVal ""
TmpNum Num
)
(while (< 0 TmpNum)
(setq TmpVal (rem TmpNum 16)
HexVal (strcat
(if (< TmpVal 10)
(chr (+ 48 TmpVal))
(chr (+ 55 TmpVal))
)
HexVal
)
TmpNum (/ TmpNum 16)
)
)
HexVal
)

 

est-ce le problème vient de l'entier car j'ai var3 "" (chaine vide)[Edité le 11/10/2008 par marionsname]

 

[Edité le 11/10/2008 par marionsname]

Posté(e)

Re,

 

Attention, la programmation demande beaucoup de rigueur.

Tu as changé le nom de l'argument (Num -> INum) dans la déclaration et pas dans le reste de la routine.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité