Taille mémoire des variables

Taille mémoire des variables - C++ - Programmation

Marsh Posté le 07-12-2005 à 16:36:53    

Salut,  :hello:  
 
J'ai un petit problème qui me bloque assez. Je vais essayer d'être clair.
J'ai un code qui permet d'envoyer à travers le port série des trames, cad, des valeurs contenues dans un tableau et dont un pointeur balaye le tableau pour envoyer les données présentes dans le tableau.
Alors voilà mon problème c'est que si je déclare une variable du style tableau[5] et que je donne par exemple à la cellule 0: 0xAFh soit tableau[0]=0xAF, lorsque j'envoi cette donnée j'obtiens bien le AFh mais aussi 3 autres octets 00h 00h 00h.
En effet à l'adresse mémoire ou figure la variable tableau[0], la vrai valeur est 000000AFh
 
Ma question est donc, comment limiter la variable pour quel n'est q'une taille d'un octet soit seulement la valeur AFh lors de l'envoi?
Quel pourrait être le moyen pour limiter le nombre d'octet transmit?
 
J'espère que vous allez pouvoir m'aider  ;)  


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 07-12-2005 à 16:36:53   

Reply

Marsh Posté le 07-12-2005 à 16:41:42    

Tu peux caster la valeur en unsigned char avant de l'envoyer.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 07-12-2005 à 16:44:58    

HelloWorld a écrit :

Tu peux caster la valeur en unsigned char avant de l'envoyer.


Tu veux dire quoi en parlant de caster la valeur en unsigned char??? Je ne suis pas très doué en C++, sorry  :p


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 07-12-2005 à 17:19:47    

(unsigned char)0x000000AF -> un seul octet AF


---------------
The Million Dollar Screenshot  (seo v7ndotcom elursrebmem paesys wifi)
Reply

Marsh Posté le 07-12-2005 à 17:32:57    

en C++, avec static_cast:

Code :
  1. int trop_long = 0x000000AF;
  2. unsigned char un_octet = static_cast<unsigned char>( trop_long );


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 07-12-2005 à 17:57:30    

Merci de l'info, j'essayerai ça demain et je vous tiens au courant!  :jap:  
 
Merkiiiii  :D


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 08-12-2005 à 08:27:32    

ça marche ET ça marche PAS  :cry:  
Lorsque j'affecte une valeur comme Trame=0xAAAAAAAA puis que j'applique votre code, j'obtient bien après affichage de la variable Trame=0xAAh mais lorsque que j'envoi la trame, il reprend par défault la valeur Trame=0x000000AAh.  :(  
 
Donc voilà, mon problème n'est pas vraiment résolu. D'autres idées???  :??:
 
J'aimerais n'envoyer que la valeur AAh et non pas les autres octets qui suivent (3 x 00h).


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 08-12-2005 à 08:46:16    

je sais pas trop, 00000010 ca vaut bien 10, non ?

Reply

Marsh Posté le 08-12-2005 à 08:51:00    

Oui là dessus je suis assez d'accord mais le problème que j'ai, c'est que si j'ai 2 variable à envoyer:
Trame[0]=0xAA;               (en mémoire 000000AAh)
Trame[1]=0xFF;                (en mémoire 000000FFh)
 
En réalité je vais obtenir l'envoie des octets suivant: (octet de poind faible en premier)
AAh 00h 00h 00h FFh 00h 00h 00h
au lieu de  
AAh FFh souhaité.
 
Tu vois le problème?    :heink:


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 08-12-2005 à 08:53:00    

je suppose que trame est un tableau d'entier ? pkoi tu fais pas un tableau de char plutot ?

Reply

Marsh Posté le 08-12-2005 à 08:53:00   

Reply

Marsh Posté le 08-12-2005 à 08:59:37    

Quels seraient les avantages?
Les propriété de char par rapport à int? Et pour faire correspondre à une variable char des valeurs hexa?


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 08-12-2005 à 09:30:39    

Ben un int c'est 4 octets dans ton cas, et char 1 seul? Cherche l'erreur...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-12-2005 à 09:34:25    

Orocher a écrit :

Quels seraient les avantages?
Les propriété de char par rapport à int? Et pour faire correspondre à une variable char des valeurs hexa?


 
gros pb de comprehension en vue, capitaine
 
un 'char' fait (generalement) un octet, 8bits.
qu'apres toi tu l'interprete comme un caractere, genre 'a', 'p', ou 'l', c'est ton probleme, pour le CPU c'est un entier sur 8bits
 
que toi derriere tu l'affiche en decimal, en hexa ou en octal, c'est ton pb. Pour le cpu c'est du binaire

Reply

Marsh Posté le 08-12-2005 à 09:43:40    

:D  Moi boulé en C++???  Un tout petit peu alors  :lol:  
 
Oki, je vois très bien le problème.
Merci bien alors  ;)


---------------
Tout vient à point à qui sait se détendre
Reply

Marsh Posté le 08-12-2005 à 13:36:09    

chrisbk a écrit :

un 'char' fait (generalement) un octet, 8bits.


Un char fait toujours un octet, et un octet fait généralement 8 bits [:aloy]


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-12-2005 à 13:37:59    

bin pour moi le oct de octet voulant dire 8 .... [:petrus75]

Reply

Marsh Posté le 08-12-2005 à 13:42:01    

HelloWorld a écrit :

Un char fait toujours un octet


Même sur les systèmes n'ayant pas d'octets? [:*syl*]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-12-2005 à 16:10:31    

chrisbk a écrit :

bin pour moi le oct de octet voulant dire 8 .... [:petrus75]


Ben ça dépend de ce que tu fais dire à octet. Si c'est le terme anglais octet, alors c'est 8 bits. Si c'est la traduction française de byte, alors ce n'est pas une très bonne traduction (mieux vaut parler de nuplet ou de mot), car la taille est variable. Par exemple sur un vieux PDP-10, un byte fait 36 bits, et un donc un char aussi...
Pour savoir si ma remarque était justifiée, il aurait fallu que tu précise ce qu'il y avait derrière le mot octet. Mais je ne doute pas que tu parlais du terme anglais, et donc que j'étais HS :jap:  

masklinn a écrit :

Même sur les systèmes n'ayant pas d'octets? [:*syl*]


Le standard dit que sizeof( char ) == 1, sous entendu 1 byte. Après, c'est au compilo de s'adapter.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-12-2005 à 16:32:06    

HelloWorld a écrit :

Le standard dit que sizeof( char ) == 1, sous entendu 1 byte. Après, c'est au compilo de s'adapter.


La dernière fois que la discussion avait eu lieu, il en était ressorti que size_t est défini comme sizeof(char), donc sizeof(char) == 1 quel que soit la taille du byte et le nombre de bytes qu'on a choisi d'utiliser pour implémenter char [:jagstang] (que ce soit 1 ou 42)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-12-2005 à 16:33:25    

[:pingouino] on s'en fout (sinon c'est CHAR_BITS)

Reply

Marsh Posté le 08-12-2005 à 18:02:33    

masklinn a écrit :

La dernière fois que la discussion avait eu lieu, il en était ressorti que size_t est défini comme sizeof(char), donc sizeof(char) == 1 quel que soit la taille du byte et le nombre de bytes qu'on a choisi d'utiliser pour implémenter char [:jagstang] (que ce soit 1 ou 42)


tu veux dire que l'unité de valeur de size_t n'est pas forcément le byte ? Ah ouai possible... Dans les cas où 1 byte = 6 bits, ça semble même logique vu que l'ascii c'est 7 bits. Par contre on imagine mal un char utiliser plus d'un byte dans les autres cas.
ça fait que:
- un byte ne fait pas forcément 8 bits
- un char ne fait pas forcément 1 byte
 :sweat:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-12-2005 à 18:07:14    

HelloWorld a écrit :

...Dans les cas où 1 byte = 6 bits, ça semble même logique vu que l'ascii c'est 7 bits. Par contre on imagine mal un char utiliser plus d'un byte dans les autres cas.


En unicode, 1 caractere = 16 bits non ?

Reply

Marsh Posté le 08-12-2005 à 18:12:32    

breizhbugs a écrit :

En unicode, 1 caractere = 16 bits non ?


ouh là non malheureux, un caractère unicode fait entre 1 et 6 octets utiles [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-12-2005 à 18:12:56    

oui mais le caractère en question, c'est wchar_t, pas char ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed