le second est le bon . pouvez-vous me dire comment se passer de cette variable temporaire ? et donc quelle erreur je fais dans la premiere version. Si j'avais ce genre de problème (ça m'arrive souvent d'introduire des
tmp pour faciliter le debug), je tenterais d'abord les parenthèses: section_length |= (*(TSpacket+offsetPAT+2));
-- Pierre
fabrizio <watch.the@stars.fr> a écrit:
désolé je toruvais pas de titre pour un truc aussi...
le second est le bon .
pouvez-vous me dire comment se passer de cette variable temporaire ?
et donc quelle erreur je fais dans la premiere version.
Si j'avais ce genre de problème (ça m'arrive souvent d'introduire des
tmp pour faciliter le debug), je tenterais d'abord les parenthèses:
section_length |= (*(TSpacket+offsetPAT+2));
le second est le bon . pouvez-vous me dire comment se passer de cette variable temporaire ? et donc quelle erreur je fais dans la premiere version. Si j'avais ce genre de problème (ça m'arrive souvent d'introduire des
tmp pour faciliter le debug), je tenterais d'abord les parenthèses: section_length |= (*(TSpacket+offsetPAT+2));
-- Pierre
Richard Delorme
désolé je toruvais pas de titre pour un truc aussi...
Quel est le type de TSpacket ? Uiliser une variable temporaire de type char peut effectuer une conversion implicte vers le type char. Si TSpacket est d'un autre type, il est normal que le résultat soit différent.
PS : - Ecrire *(TSpacket+offsetPAT+2) est une façon compliquée d'écrire TSpacket[offsetPAT + 2]. - tes printf sont sans doute erronnés. Il fallait écrire : printf("section length: %hxn",section_length); ou mieux encore : std::cout << "section length: " << section_length << std::endl;
le second est le bon . pouvez-vous me dire comment se passer de cette variable temporaire ?
- avec un conversion explicite ? section_length |= static_cast<unsigned char>(TSpacket[offsetPAT+2]);
- avec un mask ? section_length |= (TSpacket[offsetPAT+2] & 0xff);
et donc quelle erreur je fais dans la premiere version.
TSpacket n'est pas de type char ?
-- Richard
désolé je toruvais pas de titre pour un truc aussi...
Quel est le type de TSpacket ?
Uiliser une variable temporaire de type char peut effectuer une
conversion implicte vers le type char. Si TSpacket est d'un autre type,
il est normal que le résultat soit différent.
PS : - Ecrire *(TSpacket+offsetPAT+2) est une façon compliquée d'écrire
TSpacket[offsetPAT + 2].
- tes printf sont sans doute erronnés. Il fallait écrire :
printf("section length: %hxn",section_length);
ou mieux encore :
std::cout << "section length: " << section_length << std::endl;
le second est le bon .
pouvez-vous me dire comment se passer de cette variable temporaire ?
- avec un conversion explicite ?
section_length |= static_cast<unsigned char>(TSpacket[offsetPAT+2]);
- avec un mask ?
section_length |= (TSpacket[offsetPAT+2] & 0xff);
et donc quelle erreur je fais dans la premiere version.
Quel est le type de TSpacket ? Uiliser une variable temporaire de type char peut effectuer une conversion implicte vers le type char. Si TSpacket est d'un autre type, il est normal que le résultat soit différent.
PS : - Ecrire *(TSpacket+offsetPAT+2) est une façon compliquée d'écrire TSpacket[offsetPAT + 2]. - tes printf sont sans doute erronnés. Il fallait écrire : printf("section length: %hxn",section_length); ou mieux encore : std::cout << "section length: " << section_length << std::endl;
le second est le bon . pouvez-vous me dire comment se passer de cette variable temporaire ?
- avec un conversion explicite ? section_length |= static_cast<unsigned char>(TSpacket[offsetPAT+2]);
- avec un mask ? section_length |= (TSpacket[offsetPAT+2] & 0xff);
et donc quelle erreur je fais dans la premiere version.
TSpacket n'est pas de type char ?
-- Richard
kanze
fabrizio wrote:
désolé je toruvais pas de titre pour un truc aussi...
le second est le bon . pouvez-vous me dire comment se passer de cette variable temporaire ? et donc quelle erreur je fais dans la premiere version.
Apparamment, les char sont non-signés chez toi, et TSpacket pointe à un char signé. Quand on fait ce genre de manip, c'est prèsque toujours préférable de passer par des types non-signés.
En attendant, je le trouve aussi souvent préférable d'écrire en clair les bits qui nous intéressent, au moyen d'un & 0xFF, par exemple. Donc, dans ton cas, j'écrirais quelque chose du genre :
le second est le bon .
pouvez-vous me dire comment se passer de cette variable temporaire ?
et donc quelle erreur je fais dans la premiere version.
Apparamment, les char sont non-signés chez toi, et TSpacket pointe à
un
char signé. Quand on fait ce genre de manip, c'est prèsque toujours
préférable de passer par des types non-signés.
En attendant, je le trouve aussi souvent préférable d'écrire en
clair
les bits qui nous intéressent, au moyen d'un & 0xFF, par exemple.
Donc,
dans ton cas, j'écrirais quelque chose du genre :
le second est le bon . pouvez-vous me dire comment se passer de cette variable temporaire ? et donc quelle erreur je fais dans la premiere version.
Apparamment, les char sont non-signés chez toi, et TSpacket pointe à un char signé. Quand on fait ce genre de manip, c'est prèsque toujours préférable de passer par des types non-signés.
En attendant, je le trouve aussi souvent préférable d'écrire en clair les bits qui nous intéressent, au moyen d'un & 0xFF, par exemple. Donc, dans ton cas, j'écrirais quelque chose du genre :