placer un uint>255 dans un buffer [résolu] - C++ - Programmation
Marsh Posté le 06-04-2009 à 15:09:51
Le memset() que tu donnes donnes la valeur (unsigned char)taille aux sizeof(taille) premiers caracteres du tableau commencant en pDest.
Si tu veux que tes chars aient des valeurs differentes
Code :
|
(En supposant que pDest soit bien un pointeur vers unsigned char).
Marsh Posté le 06-04-2009 à 15:12:56
char *pdest = gnigni
*((UINT*)pdest) = taille;
pdest += sizeof UINT;
par contre effectivement, l'endianness reste dépendante du cpu, donc si tu veux du big endian, tu retombe sur la solution de Programmeur (mais avec des >> et & par principe, ou juste un >> )
Marsh Posté le 06-04-2009 à 15:28:57
pDest est de type PUCHAR, oui. Par contre on ne peux pas passer a travers le fait de devoir choisir le caractere du tableau ? pDest[0], pDest[1],... J'ai l'impression que c'est ce que la méthode de "bjone" propose mais je ne comprend pas son fonctionnement?
Marsh Posté le 06-04-2009 à 15:37:38
bjone a écrit : char *pdest = gnigni |
Il y a aussi des problemes d'alignement qui sont resolus avec ma methode, et -- plus anecdotique -- des problemes de taille.
Citation : (mais avec des >> et & par principe, ou juste un >> si tu en unsigned) |
Je vois la chose comme la decomposition en base 256, donc c'est division et modulo.
Si tu la vois comme des manipulations de bits, c'est >> et &.
Marsh Posté le 06-04-2009 à 15:40:22
On est d'accord
Mais le plus naturel dans ce cas est le shift (enfin question d'habitude et de pratique, mais du point de vue asm...), d'autant plus que le modulo/masque devrait être superflu.
Marsh Posté le 06-04-2009 à 15:50:32
Je viens de tester la solution de programmeur, qui marche du feu de dieu par contre, derriere je vais devoir faire le chemin inverse pour retrouver le UINT a partir de mon buffer aux adresses 0,1,2,3,4 ca me coince un peu ducou...
Marsh Posté le 06-04-2009 à 16:09:12
bjone a écrit : On est d'accord |
Quand j'ecris du C++, j'ecris pas de l'assembleur. Quand j'ecris de l'assembleur, j'ecris pas du C++.
Je pense a cette operation comme a une decomposition en base 256, donc je l'exprime comme ca.
gaellm a écrit : Je viens de tester la solution de programmeur, qui marche du feu de dieu par contre, derriere je vais devoir faire le chemin inverse pour retrouver le UINT a partir de mon buffer aux adresses 0,1,2,3,4 ca me coince un peu ducou... |
Code :
|
Marsh Posté le 06-04-2009 à 16:17:36
Merci Beaucoup, ça marche très bien, j'allais partir sur une solution de concaténation, puis d'un passage d'hexa vers decimal, mais tas méthode est plus efficace, et simple a appliquer.
Merci beaucoup !
Marsh Posté le 06-04-2009 à 14:44:38
Bonjour,
Je fait appel a la communauté pour un probleme tout bête:
Je travail actuellement sur des trames réseaux en développant un driver, j'ai donc des suites d'hexa placés dans des buffers. Je souhaiterais rajouté la taille de mon paquet devant la trame, dans mon buffer, voici comment je procède:
en hexa 4512 = 11A0, or quand j'affiche ma trame je ne vois que A0 : a0 a0 a0 a0 ff ff ff ff ff ff 45 75 ....
comment faire pour avoir par exemple : 00 00 11 a0 ff ff ff ff ff ff 45 ...
Je suis pas très claire, j'espère que vous voyez mon soucis, merci.
Message édité par gaellm le 06-04-2009 à 16:19:01