Quemar
Messages postés17Date d'inscriptionjeudi 30 juillet 2009StatutMembreDernière intervention 3 juillet 2009
-
26 avril 2005 à 14:18
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 2010
-
28 avril 2005 à 00:57
Bonjour,
j'ai un probleme de conversion
j'utilise une liaison serie pour communiquer avec un instrument qui me
renvoie des tableaux de bytes... (enfin je lit des tableaus de
Byte sur le liaison)
J'ai besoin de recuperer des informations de ces tableaux et pource
j'aimerai convertir 2bytes en short ou 4bytes en int ????.
Voila ce que je recoit : example:
byte Tab[] = {0x07, 0xD4}
Et je veux recupere :
short année = 2004
Je suis en train de developper une interface pour cet instrument et j'utilise Visual C++ .NET
Je n'ai pas troué de foction qui realise ceci mais je me doute qu'ildoit exister un moyen simple de faire ceci.
Si quelqu'un a compris quelque chose a mon problème mercei de m'aider ...
Quemar
Messages postés17Date d'inscriptionjeudi 30 juillet 2009StatutMembreDernière intervention 3 juillet 2009 27 avril 2005 à 11:56
en fait la methode que j'ai trouvé fonctionne mais j'ai ete obligé de l'abandonné car incompatible avec ce que je veux!!!!
j'aimerai que tu m'en dises plus sur ta solution....
je sais que l'on peut facilement convertir une valeur d'un tableau de byte en int par exemple
Mais moi ce que je veux c conveertir 2bytes (2*8bit) contenu ds un tableau de byte en un short
Parce que mes 2 bytes represente qu'une seule valeur de type short (16bit)...?????
-->> exemple de mon problème:
mon instrument via la liaison serie me revoie un tableau de byte:
byte TAB[10] = {0xBB, 0xA5,..., 0xD5, 0x07,...}
moi ce que je veux c 0xD5 et 0x07 qui est une année 07D5 = 2005
mais le probleme est que si je lit directement un short de la liaison
serie (SANS PASSER PAR LE TABLEAU CI DESSUS)(c la solution que j'avais
trouvé) je lit : D507 = 54355
et apres impossible d'en faire quoi que ce soit !!!!! OUBIEN
Donc je stock tout ds un tableau, je retourne (ca c facile!!!) et apres j'aimerai lire 2byte du tableau pour en faire un short.... mais ca c pas possible !!!!
Quelqu'un a t il une solution?
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 27 avril 2005 à 18:03
Dans la mémoire, toutes les variables sont constituées d'une suite d'octet. un BYTE 1 octet, un WORD 2 octets et 1 DWORD 4 octets. Les octets sont stockés poids faible en tête (little endian)
exemple :int val 0x12345678;> en mémoire tu trouvera les octets :
0x78 0x56 0x34 0x12
maintenat si tu as un pointeur sur le premire octet de cette zone, tu peux y lire soit 1, 2 ou 4 octets directement dans une variable BYTE, WORD ou DWORD grace au little endian.
pour cela il fuat convertir le pointeur sur l'octet en un pointeur sur le type de la varaible et de récupéréer la valeur.
Exemple :
// suite d'octet en mémoire
BYTE TAB[10] = {0xBB, 0xA5,..., 0xD5, 0x07,...}
// pointeur sur le 2 ème octet de cette suite
BYTE* pb = &TAB[10];
// transformation en un pointeur sur WORD (même adresses mais permet de lire 2 octet)s
WORD* pw = (WORD*)pb;
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 28 avril 2005 à 00:57
c'est la qu'on voir l'avantage de l'asm, pas besoin de pointeurs, un
simple décalage de bits et c'est ok... mais le débat n'est pas la.
pas
mal ton code, ymca, mais je doute que ce soit la meine de compliquer
les choses avec le big/little endian et le poids des bits...encore une
fois le débat n'est pas la