Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1534 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  PB en C !!! PB avec poids fort ! poids faible ! [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PB en C !!! PB avec poids fort ! poids faible ! [RESOLU]

n°234365
Le_Chab
Posté le 25-10-2002 à 11:27:39  profilanswer
 

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)
 

Code :
  1. formatIntegerIntoDataCodedOn32Bits(MSG_SIZE, 0, ByteStream);
  2. printf("\nByStream =%2.2x%2.2x%2.2x%2.2x",ByteStream0],ByteStream[1],ByteStream[2],ByteStream[3]);


 
avec : formatIntegerIntoDataCodedOn32Bits defini comme suit :
 

Code :
  1. void formatIntegerIntoDataCodedOn32Bits(int data, int k, char ByteStream[MAX_NUMBER_OF_CHAR_PER_LINE])
  2. {
  3. int high,low,pd1,pd2,pd0,rest;
  4. high=data/65536;
  5. //printf("\n high = %d",high);
  6. ByteStream[k]=(char)high;
  7. rest=data%65536;
  8. pd2=rest/4096;
  9. //printf("\n pd2 = %d",pd2);
  10. ByteStream[k+1]=(char)pd2;
  11. rest=rest%4096;
  12. pd1=rest/256;
  13. printf("\nor IntegerIntoDataCodedOn32Bits pd1 = %d",pd1);
  14. ByteStream[k+2]=(char)pd1;
  15.     pd0=rest%256;
  16. printf("\nfor IntegerIntoDataCodedOn32Bits pd0 = %d",pd0);
  17. ByteStream[k+3]=(char)pd0;
  18. }


 
 
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
mood
Publicité
Posté le 25-10-2002 à 11:27:39  profilanswer
 

n°234391
Le_Chab
Posté le 25-10-2002 à 11:54:49  profilanswer
 

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 !

n°234395
chrisbk
-
Posté le 25-10-2002 à 12:01:34  profilanswer
 

formatIntegerIntoDataCodedOn32Bits, t'as pas plus court comme nom ? [:ddr555]
 
je regarderais ton soucis un peu plus tard, la fo que j'aille bouffer ;)
 
 

n°234399
Le_Chab
Posté le 25-10-2002 à 12:05:51  profilanswer
 

chrisbk a écrit a écrit :

formatIntegerIntoDataCodedOn32Bits, t'as pas plus court comme nom ? [:ddr555]
 
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 ....  
 :D

n°234423
Carbon_14
Posté le 25-10-2002 à 13:06:55  profilanswer
 

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.
 
 :heink: 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. :D


Message édité par Carbon_14 le 25-10-2002 à 13:07:59
n°234456
Le_Chab
Posté le 25-10-2002 à 14:04:12  profilanswer
 

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.
 
 :heink: 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. :D  




 
 
 
je vais faire un essai tout de meme avec des long... merci carbon_14 !

n°234477
Le_Chab
Posté le 25-10-2002 à 14:22:41  profilanswer
 

en fait c'est sur l'affichage du pd0 que ca merde !

Code :
  1. pd0=rest%256;


 
sachant ensuite que je le caste sur un char, je me demande si ce n'est pas ca qui met le bronx ?...  

n°234534
Le_Chab
Posté le 25-10-2002 à 14:50:02  profilanswer
 

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.


Message édité par Le_Chab le 25-10-2002 à 14:51:10
n°234542
Carbon_14
Posté le 25-10-2002 à 14:56:02  profilanswer
 

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é.


Message édité par Carbon_14 le 25-10-2002 à 14:56:29
n°234546
Le_Chab
Posté le 25-10-2002 à 15:00:22  profilanswer
 

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é.




 :jap:  
 
ouais c'etait bien ca ! arf dur d'etre un newbie ...  
 
Merci a tous ! ca marche nickel !
 :hello:

mood
Publicité
Posté le 25-10-2002 à 15:00:22  profilanswer
 

n°234553
Carbon_14
Posté le 25-10-2002 à 15:03:29  profilanswer
 

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).
 :jap:

n°234690
YungMakko
Posté le 25-10-2002 à 18:14:04  profilanswer
 

ça t'interesse p'tete pas, mais sous Windows y'a les Macros:
 

Code :
  1. WORD HIWORD(DWORD dwValue);
  2. WORD LOWORD(DWORD dwValue);


 
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 :
  1. HIWORD(my32bitValue) ((WORD)(((DWORD)(my32bitValue) >> 16) & 0xFFFF))


 
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?


---------------
In tartiflette, we trust!
n°235313
Musaran
Cerveaulté
Posté le 26-10-2002 à 23:37:35  profilanswer
 

unsigned char //de         0 à UCHAR_MAX
signed char   //de SCHAR_MIN à SCHAR_MAX
char          //de  CHAR_MIN à  CHAR_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 :
  1. //Les signages de "ByteStream" et de "data" doivent être correspondre.
  2. void formatIntegerIntoDataCodedOn32Bits(signed int data, int k, signed char ByteStream[MAX_NUMBER_OF_CHAR_PER_LINE])
  3. {
  4. ByteStream[k+0]= (data>>24)&0xFF;
  5. ByteStream[k+1]= (data>>16)&0xFF;
  6. ByteStream[k+2]= (data>> 8)&0xFF;
  7. ByteStream[k+3]= (data>> 0)&0xFF;
  8. }


Ou encore plus simple:

Code :
  1. //Aucune contrainte sur le type de data ou le signage de ByteStream
  2. void formatIntegerIntoDataCodedOn32Bits(int data, int k, char ByteStream[MAX_NUMBER_OF_CHAR_PER_LINE])
  3. {
  4. char* pdata= (char*)&data;
  5. ByteStream[k+0]= pdata[3];
  6. ByteStream[k+1]= pdata[2];
  7. ByteStream[k+2]= pdata[1];
  8. ByteStream[k+3]= pdata[0];
  9. }


Ne pas oublier:

Code :
  1. #include <assert.h>
  2. assert(sizeof(int)==4);


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  PB en C !!! PB avec poids fort ! poids faible ! [RESOLU]

 

Sujets relatifs
[PHP] Include/require à distance (résolu, merci!)[résolu] images Tiff : tag spécifiant la position du repère
[PHP] remplacer une chaine de caractères dans un .ini [resolu]problème unix-windows (résolu)
problème sur les fichiers (ouverture, fermeture, etc.) [résolu][PHP] Insérer des valeurs dans une zone de texte [Résolu]
problemes sur les tableaux (résolu)Transférer l'intégralité d'une base de donnée [résolu]
[Résolu] chopper la valeur d'un combobox selectionnéPb #1 : Resolu -> Nouvelle QUESTION Pb #2
Plus de sujets relatifs à : PB en C !!! PB avec poids fort ! poids faible ! [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR