2009-10-08 8 views
0

Je n'ai pas traité depuis longtemps de programmation contre des périphériques matériels et j'ai pratiquement oublié toutes les bases.Bit le plus significatif

J'ai une spécification de ce que je devrais envoyer dans un octet et chaque bit est défini du bit le plus significatif (bit7) au moins significatif (bit 0). Comment puis-je construire cet octet? De MSB à LSB, ou vice versa?

+1

Quand vous dites "construire", que voulez-vous dire? - Il semble que vous ayez toutes les informations dont vous avez besoin. – Anna

+1

juste essayer ... si cela ne fonctionne pas, inverser l'ordre. Le plus commun est d'avoir le bit 0 comme lsb – Toad

Répondre

5

Si ces bits sont « Packeted » (dont ils sont en général) , alors l'ordre des bits est l'ordre natif, 0 étant le LSB, et 7 étant le MSB. Les bits ne sont généralement pas envoyés un à un, mais en octets (généralement plus d'un octet ...).

Selon wikipedia, l'ordre des bits peut parfois être de 7 à> 0, mais c'est probablement le cas rare.

1

Si la spécification indique MSB, créez-le MSB. Sinon, si la spécification dit LSB, alors construisez-le LSB. Sinon, demandez plus d'informations.

+0

La spécification ne dit rien. Dans certains endroits, les bits sont énumérés de 0 à 7, dans d'autres endroits de 7 à 0. Quelle est la manière la plus courante? – AngryHacker

+2

Selon ce http://en.wikipedia.org/wiki/Most_significant_bit les deux moyens existent. D'après mon expérience, 0 est le LSB. – Anna

2

Si vous voulez écrire tout l'octet en même temps, c'est-à-dire faire un transfert parallèle par opposition à un numéro de série, l'ordre des bits n'a pas d'importance.

Si le transfert est série, alors vous devez trouver dans quel ordre l'appareil attend les bits, il est impossible de le savoir de l'extérieur.

Pour seulement assembler un octet de huit bits, il suffit d'utiliser l'opérateur OR pour « ajouter » bits, un à la fois:

byte value = 0; 

value |= (1 << n); // 'n' is the index, with 0 as the LSB, of the bit to set. 
Questions connexes