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

  FORUM HardWare.fr
  Programmation
  C

  [C] Peut-on conscidèrer ce bout de code correct ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Peut-on conscidèrer ce bout de code correct ?

n°468028
Deadog
Dain Bramaged
Posté le 25-07-2003 à 18:00:47  profilanswer
 

sous linux, glibc-2.2.x, gcc, bla bla bla ... :
 

Code :
  1. unsigned char get_upper_bit (unsigned short data) {
  2.   char *temp=NULL;
  3.   unsigned char ret;
  4.  
  5.   temp = (char *) &data;
  6.   ret = *temp;
  7.   return ret;
  8. }
  9. unsigned char get_lower_bit (unsigned short data) {
  10.   char *temp=NULL;
  11.   unsigned char ret;
  12.  
  13.   temp = (char *) &data;
  14.   ret = *++temp;
  15.   return ret;
  16. }


 
mon but est de séparer le 1er et le 2ème bit d'un short de manière correct, cad ke ce ke je doit avoir est un octet contenant le 1er bit et un autre octet contenant le 2ème bit, pour pouvoir être envoyer d'en une fonction ki a un prototype de ce genre :

Code :
  1. char ma_fonction (unsigned char data1, unsigned char data2);


 
j'ai bien essayé ça :

Code :
  1. ma_fonction ((unsigned char) mon_short % 256, (unsigned char) mon_short >> 8);


mais ça couille sur le 2ème et me donne data2 = 0 :/
 
alors, mes deux fonctions sont elle "correct" au sens manière d'écrire, transgression de règles, etc ... ?
(le compilo ne fait pas de warning et le resultat est bon)


Message édité par Deadog le 25-07-2003 à 18:05:17
mood
Publicité
Posté le 25-07-2003 à 18:00:47  profilanswer
 

n°468056
Taz
bisounours-codeur
Posté le 25-07-2003 à 18:28:59  profilanswer
 

Code :
  1. unsigned char get_upper_byte(unsigned short data)
  2. {
  3.   return (data >> 8) & 0xFF;
  4. }
  5. unsigned char get_lower_byte(unsigned short data)
  6. {
  7.   return data & 0xFF;
  8. }
  9. #include <stdio.h>
  10. int main(int argc, char **argv)
  11. {
  12.   for( ; argc!=1; --argc)
  13.     {
  14.       short unsigned i;
  15.       if(sscanf(argv[argc-1], "%hu", &i) == 1)
  16. {
  17.   printf("%hu %#0X -> %#0X %#0X\n",
  18.   i,
  19.   i,
  20.   get_upper_byte(i),
  21.   get_lower_byte(i)
  22.   );
  23. }
  24.     }
  25.   return 0;
  26. }

moi je verrais plutot ça, qui doi fonctionner sur une machine ou un char est codé sur CHAR_BIT == 8 et où un sizeof(unsigned short) >= 2

n°468057
LetoII
Le dormeur doit se réveiller
Posté le 25-07-2003 à 18:30:03  profilanswer
 

Bon alors c pas des bits que tu veux récupérer mais des byte
 
Et tes fonctions sont à chier:
 
 

Code :
  1. unsigned char highOrder(unsigned short s)
  2. {
  3.    return (unsigned char)(s >> 8);
  4. }
  5. unsigned char lowOrder(unsigned short s)
  6. {
  7.    return (unsigned char)s;
  8. }


 
Pas la peine de se compliquer la vie  :whistle:


Message édité par LetoII le 25-07-2003 à 18:34:06

---------------
Le Tyran
n°468061
LetoII
Le dormeur doit se réveiller
Posté le 25-07-2003 à 18:34:46  profilanswer
 

++Taz a écrit :

Code :
  1. unsigned char get_upper_byte(unsigned short data)
  2. {
  3.   return (data >> 8) & 0xFF;
  4. }
  5. unsigned char get_lower_byte(unsigned short data)
  6. {
  7.   return data & 0xFF;
  8. }
  9. #include <stdio.h>
  10. int main(int argc, char **argv)
  11. {
  12.   for( ; argc!=1; --argc)
  13.     {
  14.       short unsigned i;
  15.       if(sscanf(argv[argc-1], "%hu", &i) == 1)
  16. {
  17.   printf("%hu %#0X -> %#0X %#0X\n",
  18.   i,
  19.   i,
  20.   get_upper_byte(i),
  21.   get_lower_byte(i)
  22.   );
  23. }
  24.     }
  25.   return 0;
  26. }

moi je verrais plutot ça, qui doi fonctionner sur une machine ou un char est codé sur CHAR_BIT == 8 et où un sizeof(unsigned short) >= 2


 
Juste par curiosité, y a beaucoup de machine qui code le char sur plus d'un octet?


---------------
Le Tyran
n°468064
Taz
bisounours-codeur
Posté le 25-07-2003 à 18:39:52  profilanswer
 

pas vraiment dans le monde du PC, mais y a beaucoup de processeur RISC industriel ou les char sont sur 16bits voir 32bits. enfin, c'est plus courant qu'on ne le pense. il y avait aussi des architecture avec des char sur 8/10bits. Autant prendre une bonne habitude, deplus on ne sait jamais sur quelle machine tournera son code, et puis la macro CHAR_BIT est bien plus élégante des nombres magiques comme 8, etc...

n°468069
LetoII
Le dormeur doit se réveiller
Posté le 25-07-2003 à 18:42:11  profilanswer
 

++Taz a écrit :

pas vraiment dans le monde du PC, mais y a beaucoup de processeur RISC industriel ou les char sont sur 16bits voir 32bits. enfin, c'est plus courant qu'on ne le pense. il y avait aussi des architecture avec des char sur 8/10bits. Autant prendre une bonne habitude, deplus on ne sait jamais sur quelle machine tournera son code, et puis la macro CHAR_BIT est bien plus élégante des nombres magiques comme 8, etc...


 
Tout à fait d'accord avec toi. Mais, tout en sachant que ça pouvait exister je conaissais pas d machines ou le char faisait pas 8 bits.


---------------
Le Tyran
n°468074
Deadog
Dain Bramaged
Posté le 25-07-2003 à 18:47:07  profilanswer
 

ah oui, tiens, j'me susi confondu sur le byte, surement le manque de sommeil :sleep:  
 
merci, m'enfin ça me parait assez bizarre de faire des changements de cast comme ça :heink:

n°468075
Taz
bisounours-codeur
Posté le 25-07-2003 à 18:48:39  profilanswer
 

cela dit un byte doit etre traduit par multiplet ou plus-petite-unité-adressable, c'est ce sens qu'utilise le C.


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

  [C] Peut-on conscidèrer ce bout de code correct ?

 

Sujets relatifs
[ASP + VB.net] Séparer HTML et codeRecuperer le code PHP
[C++] Portion de code asm intel & gcc[ASP=>PHP] transcrire ce code de l asp en php
Envoyer un mail avec code HTML avec Mapi sous VB...Le code auto modifié ?
[Word] Recherche code pour le carriage return ou espace[MFC] scanner de code barre
[Eclipse] Formatage de code ?[VBA et Access] Question sur un morceau de code !
Plus de sujets relatifs à : [C] Peut-on conscidèrer ce bout de code correct ?


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