Taille mémoire des variables - C++ - Programmation
Marsh Posté le 07-12-2005 à 16:41:42
Tu peux caster la valeur en unsigned char avant de l'envoyer.
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
Marsh Posté le 07-12-2005 à 17:19:47
(unsigned char)0x000000AF -> un seul octet AF
Marsh Posté le 07-12-2005 à 17:32:57
en C++, avec static_cast:
Code :
|
Marsh Posté le 07-12-2005 à 17:57:30
Merci de l'info, j'essayerai ça demain et je vous tiens au courant!
Merkiiiii
Marsh Posté le 08-12-2005 à 08:27:32
ça marche ET ça marche PAS
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).
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?
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 ?
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?
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...
Marsh Posté le 08-12-2005 à 09:34:25
Orocher a écrit : Quels seraient les avantages? |
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
Marsh Posté le 08-12-2005 à 09:43:40
Moi boulé en C++??? Un tout petit peu alors
Oki, je vois très bien le problème.
Merci bien alors
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
Marsh Posté le 08-12-2005 à 13:37:59
ReplyMarsh 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?
Marsh Posté le 08-12-2005 à 16:10:31
chrisbk a écrit : bin pour moi le oct de octet voulant dire 8 .... |
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
masklinn a écrit : Même sur les systèmes n'ayant pas d'octets? |
Le standard dit que sizeof( char ) == 1, sous entendu 1 byte. Après, c'est au compilo de s'adapter.
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 (que ce soit 1 ou 42)
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 (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
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 ?
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
Marsh Posté le 08-12-2005 à 18:12:56
oui mais le caractère en question, c'est wchar_t, pas char
Marsh Posté le 07-12-2005 à 16:36:53
Salut,
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