From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Conversion hexa -> décimal

Résolu !
Accéder à la solution

Bonjour, j'ai un problème de conversion de chaine de caractère décimal vers un nombre hexadécimal.

Pour résumer mon image si dessous, "serial number" est une chaine de caractère contenant le nombre 527 que je transforme en nombre hexa = 20F.

Puis je sépare les digits en 0F et 2 et ainsi construire une trame de donnée.

Le problème est que la data obtenue via cette méthode ne donne pas la data voulue.

TGZ_0-1681214236800.png

Avez-vous des solutions ou besoin de plus d'explications ? 

 

Merci d'avance,

0 Compliments
Message 1 sur 5
839 Visites

Bonjour TGZ,

 

En hexa, '0F' ou 'F', c'est la même chose. C'est comme dire 023 et 23 en décimal.

 

Tout dépend du tableau de données que tu as besoin en sortie. Est-ce un tableau de valeurs de largeurs 8 bits ou 16 bits ?

Très souvent on a des nombres hexa par bloc de largeur 2 ou 4, suivant la longueur de chaque nombre possible.

Une largeur de 2 c'est pour 256 valeurs possible (8bits), du x00 au xFF.

Une largeur de 4 c'est pour 65636 valeurs possible (16bits), du x0000 au xFFFF.

 

Si tu veux injecter dans ton tableau 527, ce n'est pas possible dans un tableau de largeur 8 bits.

 

Tu sépares donc le 527 en deux blocs, il me semble que tu as donc un tableau en 8bits.

Les bits de poids fort en premier, suivit des bits de poids faible en suivant.

 

Donc c'est juste.

Où est le problème ? 🤣

 

KaleckFR_0-1681238925295.png

Ici les données sont exactement les mêmes, juste l'affichage qui change.

 

Edit : Je viens de voir "bLength" avec la valeur 8. donc tu sembles bien avoir un tableau d'un largeur 8 bits. Peux etre que si tu peux changer à 16 bits, tu pourras envoyé directement 527, et du coup aucun découpage à faire.

 

0 Compliments
Message 2 sur 5
820 Visites

Le data voulu ne serait pas plutôt F 20 0 0 1 A 0 10 ?

 

Note, quand tu utilises la fonction Build Array tu as A et 10 comme valeur ce qui indique que l'affichage est hexadécimale et qu'il y a 2 bytes, donc ce sont des U16.Comme on n'a pas la spécification du cluster Msg on ne sait pas quel devrait être le datatype de abData

 

2F = 47 et 20F = 527, tu perds le zéro de la façon dont tu fais la transformation

 

Ben64

0 Compliments
Message 3 sur 5
767 Visites

Salut ben64,

 

Je pense que tu fais une erreur sur les 2 bytes, ou alors je n'ai pas compris ce que tu voulais dire.

Les valeurs "0x10" ou "0xA" sont bien comprises dans la gamme d'un seul byte, donc il semble bien être sur du U8 (0x00 à 0xFF).

 

A ne pas confondre avec des constantes chaines où chaque caractère est une valeur 8 bits issue de la table ASCII étendu, et donc une largeur 2 aurait utilisé un U16 de stockage. Ici il utilise des constantes numériques dans la gamme U8, sauf pour le 0x20F que l'on ne comprends pas vraiment.

Le découpage de 0x20F en deux U8 devrait par habitude être 0x02 puis 0x0F s'il représente une valeur dans sa trame et non l'inverse, mais tout dépend de l'appareil qui doit recevoir les données (si c'est bien pour un appareil, mais vu le tableau, ça semble être le cas).
Peut etre aussi que 0x20F représente 2 valeurs, difficile de comprendre sans en savoir plus... 😐

0 Compliments
Message 4 sur 5
753 Visites
Solution
Accepté par l'auteur du sujet TGZ

En effet tu as raison! Et en effet il manque beaucoup d'information

 

Ben64

0 Compliments
Message 5 sur 5
748 Visites