le 11-26-2018 11:30 AM
j'ai peut etre une idee comment cela fonctionne, je verifierai ce soir.
le 11-26-2018 08:17 PM
Allons-y avec l'explication,
Premièrement, recréer le code. Comme la plupart l'on trouvé il s'agit dans un premier temps de convertir une chaine de caractères en un tableau 1D de booléens à l'aide de la fonction typecast et de transformer le tableau résultant en constante. On utilise ensuite cette constante avec la fonction typecast pour recréer la chaine de caractères.
Comment cela fonctionne-t-il? La clé est la fonction typecast. Tous les types de data sont gardés en mémoire sous forme de bytes. La fonction typecast ne modifie pas la valeur en mémoire mais elle représente cette valeur sous un autre type de data lorsque c'est possible (c'est un peu une version élargie des fonctions de conversion numérique) . Dans le code du défi chaque caractère d'une chaine est représenté par un U8 dont la valeur correspond à celle de ce caractère dans la table ASCII. Un booléen est également gardé en mémoire sous la forme d'un U8, la fonction typecast est utilisée pour réinterpréter les bytes de la chaine de caractères comme étant un tableau 1D de booléens. Par exemple le caractère "A" à la valeur 0x41, il sera donc converti en booléen VRAI mais dont la valeur U8 en mémoire est 0x41 et non pas 0x01. Dans le lien précédent il est précisé que toute valeur différente de zéro correspond à la valeur VRAI, c'est pourquoi la chaine de caractères convertie est représentée par un tableau 1D de valeurs VRAI (seul le caractère NULL 0x00 sera représenté par la valeur FAUX). Si vous avez fait la vérification vous observerez que la taille du tableau 1D de booléens correspond à la longueur de la chaine de caractères.
Autre remarque, si vous essayez de changer les valeurs des booléens du tableau les booléens reprendrons leurs valeur nominales de 0 ou 1, Les caractères correspondant à ces booléens ne seront plus lisibles dans la chaine résultante.
J'ai découvert ce code dans ce fil (troisième message posté par Jean Pierre).
Ben64
le 11-27-2018 01:53 AM
Merci pour l'explication 😉
J'ai regardé l'aide détaillée de la fonction hier, mais je ne devais pas avoir les yeux en face des trous...
le 11-27-2018 08:14 AM
salut, je ne connaissais pas, et je te remercie encore. Je me suis vraiment bien amusé avec. J'ai donné le petit code suivant à mes collègues de travail (tous des CLA et CTA)... nous avons bien rigolé. Merci pour le partage. Je pense que je n'ai pas terminé d'en parlé!
bonne journée A+ Luc
Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion
MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group
le 11-27-2018 08:23 AM
le 11-27-2018 08:38 AM
non! évidement. Surtout que je monterais le code en disant "alors regarde le code suivant"...
toi qui est CLA, peux-tu me donner le résultat? même si c'est trop simple comme question...
un petit "Run" avec un résultat de 151,
puis je change la constante à false -> le résultat devient 0,
et je rechange la constante à True.... alors??? 151? non, 1!
Je vais me garder cet exemple de côté, car je pense le ressortir dans les prochains jours. Il va rendre dingue bien plus d'un développeur LabVIEW.
A+ Luc
Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion
MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group
le 11-27-2018 08:52 AM
Pour ceux qui ont participé au Challenge de Novembre de Guillaume l'explication de la méthode sans boucle minimale se trouve également dans la fonction Typecast. Avant LabVIEW 5 les booléens étaient conservé en mémoire en utilisant 2 bytes sauf dans le cas d'un tableau où chaque élément du tableau représentait un bit. En utilisant la fonction typecast dans le mode Convert 4.x Data on obtenait directement le résultat. Félicitation à Didier qui a réussit à trouver l'astuce!
Ben64
le 11-27-2018 09:28 AM
Même si ça a l'air sympa comme ça, je trouve que l'explication met le doigt sur une faiblesse plutôt que sur une force de labview. Si je te suis bien, le "dictionnaire" des typecast est dynamique, et c'est une sorte de variable globale qui se cache dans L'IDE. J'espère ne jamais avoir à debugger un truc pareil...
le 11-27-2018 10:21 AM
pas une variable globale plutôt un variant ?