kungfu-sheep Anomalie floodiforme
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
|
Posté le: 23/02/12 21:00 Sujet du message: les mystères de worldedit |
|
|
Les conversions de types de variables
Voici en jass, les 6 fonctions de conversion que l'on retrouve :
Jass: | call I2S(integer) // integer => string
call I2R(integer) // integer => real
call R2S(real) // real => string
call R2I(real) // real => integer
call S2R(string) // string => real
call S2I(string) // string => integer |
à priori, c'est simple. Je rentre ma variable de type integer, et je peux avec cette fonction l'utiliser comme une string ou un real.
Cependant, lorsque c'est une string que l'on veut transformer en integer ou en real, il se peut que dans le lot il s'y glisse une lettre.
Que deviennent les lettres une fois integer ou réel ?
Jass: | call BJDebugMsg(I2S(S2I("45df32"))) |
Ceci affichera 45.
Je converti un integer en string un string au préalable converti en integer.
on y voit de la perte. Il en va de même si j'avais converti un réel en string.
On voit donc que la convertion s'arrête nette lorsqu'elle rencontre une lettre.
Cependant,
Jass: | call BJDebugMSG(I2S(S2I("d4215648"))) |
affichera 0, de même pour un réel et non null.
Que deviennent les integers une fois réels ?
C'est une simple troncature de tout les chiffres après la virgule, rien de plus à dire. Aucun mystère.
Que deviennent les 'code' une fois convertis en string ?
à ma grande surprise,
Jass: | call BJDebugMsg(I2S('hpea')) |
n'affichera pas hpea mais une série de 10 chiffres.
tout comme :
Jass: | call BJDebugMsg(I2S(GetTerrainType(GetRectCenterX(gg_rct_a), GetRectCenterY(gg_rct_a)))) |
on se retrouve avec 10 chiffres.
Ces chiffres correspondent surement à un numéro de série, ou peut être que chaque lettre en 'code' a sa propre écriture chiffré. Aucune idée, ça serait à approfondir mais j'n'ai pas le temps.
Que deviennent les 'code' convertis en real ?
On pourrait penser que c'est la même chose que 'code' en string mais avec une virgule, ba non. Le nombre est différent.
Jass: | call BJDebugMsg(R2S(I2R(GetTerrainType(GetRectCenterX(gg_rct_a), GetRectCenterY(gg_rct_a)))))
call BJDebugMsg(R2S(I2R('hpea')))
call BJDebugMsg(I2S(GetTerrainType(GetRectCenterX(gg_rct_a), GetRectCenterY(gg_rct_a))))
call BJDebugMsg(I2S('hpea')) |
On aura : 1281651200.000 et 1281651316 pour le terrain type. J'ai pas eu le temps de copier le type unit, mais encore une fois ce sont les derniers chiffres qui changent.
Allez me trouver une logique ? J'en sais rien, ça serait encore à approfondir, mais trop long et trop vague.
Faire attention :
Il est important, quand on fait des calculs en utilisant des fonction convertissant des string en integer ou réel, de vérifier qu'il n'y aura pas de lettre pouvant mettre à mal votre calcul.
Une division par 0 est impossible, j'en viens alors à mon 2è sujet. _________________
|
|