Agencement des bits dans un bitfield - C++ - Programmation
MarshPosté le 09-06-2005 à 10:45:29
Salut, comme mon titre l'indique j'ai une petite interrogation au niveau de l'agencement des bits en utilisant des bitfields:
J'ai des données qui sont toujours alignées sur des octets (byte alignement) avec des groupes de bits correspondants chacun à une variable. Voici mon code pour un type particulier (ici NAL_first_byte = 1 octet)
j'ai alors remarqué que cela correspondait à un agencement des données en sens inverse -> 01100111 (ordre 5-2-1 au lieu de 1-2-5 pour la lecture des bits)
J'ai donc trouvé sur le web:
Citation :
La manière dont les différents groupes de bits sont placés en mémoire dépend du compilateur et n'est pas normalisée.
Donc j'en arrive à ma question, bien que ce ne soit pas normalisé, est ce que les compilateurs garantissent au moins que la lecture ce fait de gauche à droite ou de droite à gauche uniquement (dans mon exemple 5-2-1 ou 1-2-5) et que je ne risque pas d'avoir des cas du type (1-5-2, 2-1-5, etc.) ? Cela simplifirait la lecture plutot que de le faire manuellement avec des masques et décalages.
Ca pourrait être sympa d'afficher les résultats obtenus en fonction du compilateur utilisé pour ceux qui veulent bien tester (le code suivant permet de tester sans le fichier que j'utilise)
Marsh Posté le 09-06-2005 à 10:45:29
Salut, comme mon titre l'indique j'ai une petite interrogation au niveau de l'agencement des bits en utilisant des bitfields:
J'ai des données qui sont toujours alignées sur des octets (byte alignement) avec des groupes de bits correspondants chacun à une variable.
Voici mon code pour un type particulier (ici NAL_first_byte = 1 octet)
Donc avec ce code ci je prends l'exemple sur mon octet qui vaut 0x67 (->en binaire = 0 11 00111)
en résultat, j'obtiens (avec dev-cpp 4.9.9.2 (gcc 3.4.2)):
sizeof(NAL_first_byte): 4
NAL Header
Reserved Bit: 1
Reference IDC: 3
NAL Unit Type: 12
alors que ce que je souhaitais obtenir c'est:
sizeof(NAL_first_byte): 4
NAL Header
Reserved Bit: 0
Reference IDC: 3
NAL Unit Type: 7
j'ai alors remarqué que cela correspondait à un agencement des données en sens inverse -> 01100 11 1 (ordre 5-2-1 au lieu de 1-2-5 pour la lecture des bits)
J'ai donc trouvé sur le web:
La manière dont les différents groupes de bits sont placés en mémoire dépend du compilateur et n'est pas normalisée.
Donc j'en arrive à ma question, bien que ce ne soit pas normalisé, est ce que les compilateurs garantissent au moins que la lecture ce fait de gauche à droite ou de droite à gauche uniquement (dans mon exemple 5-2-1 ou 1-2-5) et que je ne risque pas d'avoir des cas du type (1-5-2, 2-1-5, etc.) ? Cela simplifirait la lecture plutot que de le faire manuellement avec des masques et décalages.
Ca pourrait être sympa d'afficher les résultats obtenus en fonction du compilateur utilisé pour ceux qui veulent bien tester (le code suivant permet de tester sans le fichier que j'utilise)
Message édité par chicotruss le 10-06-2005 à 00:05:34