PB en C !!! PB avec poids fort ! poids faible ! [RESOLU] - C++ - Programmation
Marsh Posté le 25-10-2002 à 11:54:49
bon je precise que pour extraire chaque poids fort, poids faible j'utilise la division entiere et le modulo... putain ca doit etre tellement con que je ne trouve pas pourquoi ca ne marche pas ... en fait j'ai remarque que sur certaines valeurs ca marchait trop bien ... du coup je suis pomme je comprends plus ...
HELP !
Marsh Posté le 25-10-2002 à 12:01:34
formatIntegerIntoDataCodedOn32Bits, t'as pas plus court comme nom ?
je regarderais ton soucis un peu plus tard, la fo que j'aille bouffer
Marsh Posté le 25-10-2002 à 12:05:51
chrisbk a écrit a écrit : formatIntegerIntoDataCodedOn32Bits, t'as pas plus court comme nom ? je regarderais ton soucis un peu plus tard, la fo que j'aille bouffer |
skool ! ouais je sais mes noms de fonctions doivent parler d'eux meme donc ils font toujours 30 m de long ....
Marsh Posté le 25-10-2002 à 13:06:55
A tout hasard, en utilisant des longs au lieu de (int data, int k, .. ca irait pas mieux ?
int / 65536, je sais pas si ça donne toujours ce qu'on en attend. Les unsigned int vont de 0 jusqu'à 65535.
Je parle des int 16 bits (c'est mon quotidien), je pense que ma remarque est déplacée (je l'efface quand solution trouvée).
EDIT : Pour les noms à rallonge, je fais un peu pareil (+ "facile" à lire) grâce au Copier/coller.
Marsh Posté le 25-10-2002 à 14:04:12
carbon_14 a écrit a écrit : A tout hasard, en utilisant des longs au lieu de (int data, int k, .. ca irait pas mieux ? int / 65536, je sais pas si ça donne toujours ce qu'on en attend. Les unsigned int vont de 0 jusqu'à 65535. Je parle des int 16 bits (c'est mon quotidien), je pense que ma remarque est déplacée (je l'efface quand solution trouvée). EDIT : Pour les noms à rallonge, je fais un peu pareil (+ "facile" à lire) grâce au Copier/coller. |
je vais faire un essai tout de meme avec des long... merci carbon_14 !
Marsh Posté le 25-10-2002 à 14:22:41
en fait c'est sur l'affichage du pd0 que ca merde !
Code :
|
sachant ensuite que je le caste sur un char, je me demande si ce n'est pas ca qui met le bronx ?...
Marsh Posté le 25-10-2002 à 14:50:02
ca y est j'ai trouve ! pour toute donnee entiere superieure ou egale a 128, lorsque je veux caster cette donnee sur un char ben au niveau affichage ca plantouille on dirais ....
genre:
n=127 : result=(char)127; j'affiche 7f pour result.
n=128 : result=(char)128; j'affiche ffffff80 pour result.
Marsh Posté le 25-10-2002 à 14:56:02
On n'y pense pas toujours, mais un char est "signé"
unsigned char 8 bits 0 to 255
char 8 bits -128 to 127
EDIT : extrait de l'aide de mon BORLAND préféré.
Marsh Posté le 25-10-2002 à 15:00:22
carbon_14 a écrit a écrit : On n'y pense pas toujours, mais un char est "signé" unsigned char 8 bits 0 to 255 char 8 bits -128 to 127 EDIT : extrait de l'aide de mon BORLAND préféré. |
ouais c'etait bien ca ! arf dur d'etre un newbie ...
Merci a tous ! ca marche nickel !
Marsh Posté le 25-10-2002 à 15:03:29
En fait, ça m'était sorti de la tête (y a plein de chimie dedans ).
Merci d'avoir permis de remettre les choses en place (je vais lorgner sur mes prog voir si je me fait pas aussi pièger qq fois).
Marsh Posté le 25-10-2002 à 18:14:04
ça t'interesse p'tete pas, mais sous Windows y'a les Macros:
Code :
|
Si tu veux faire ça toi même ou si tu ne disposes pas de ces macros sous Borland, un bon truc du style:
Code :
|
sera plus clean pour extraire les 2 octets de poids fort d'un entier 32 bits.
Même principe octet par octet.
C'est pas mieux?
Marsh Posté le 26-10-2002 à 23:37:35
unsigned char //de 0 à UCHAR_MAX |
"char" est signé ou pas selon les implémentations... c'est un type distinct.
Il faut noter que rien ne garantit qu'un char fasse 8 bits...
Je pense qu'il y a erreur, tu extraits des quartets au lieu d'octets.
Enfin, c'est de la manipulation de bits, pas de l'arithmétique...
Je propose ceci:
Code :
|
Ou encore plus simple:
Code :
|
Ne pas oublier:
Code :
|
Marsh Posté le 25-10-2002 à 11:27:39
voila mon PB, je veux convertir des valeurs entieres en les reformatant sur un format choisi (ex 32 bits) et en isolant les poids faibles et poids fort.
exemple:MSG_SIZE=194 (soit c2 en hexa)
avec : formatIntegerIntoDataCodedOn32Bits defini comme suit :
au lieu de m'afficher 000000c2
j'affiche 000000ffffffc2
quelqu'un saurait-il pourquoi ?
Message édité par Le_Chab le 25-10-2002 à 15:00:47