2010-10-04 19 views
1

J'ai un scénario bizarre (voir this answer pour plus de détails), où je dois ajouter deux octets de données ensemble. Évidemment, ce n'est pas normal d'ajouter. Voici le scénario:Comment « Ajouter » deux octets ensemble

Je suis en train d'obtenir une coordonnée d'un contrôle. Lorsque la commande a une largeur inférieure à 256, la coordonnée x prend un octet, sinon elle prend deux bits.

Alors, j'ai maintenant une instance de ce contrôle qui est plus grand que 256 de largeur. Comment ajouter ces deux nombres ensemble?

Ainsi, par exemple:

  • 2 + 0 n'est pas 2 parce que le 2 est l'octet de poids fort (ou peut-être est l'octet de poids faible et il est 2 ...)

Am J'ai du sens? Si oui, comment puis-je faire ce genre d'addition en C#?


Mise à jour: Désolé pour la question déroutante. Je pense que je l'ai compris. Voir ma réponse ci-dessous.

+1

« Suis-je donner un sens? »: Non, absolument pas ... pourquoi vous utilisez octets en premier lieu, au lieu d'un type plus adéquat comme int? –

+2

'hi * 256 + lo'? – pascal

+0

... hein? Pourquoi vous inquiétez-vous des octets? La largeur est un nombre entier. –

Répondre

2

approche avec multiplicatif est assez clair mais pas commun dans le mot de bitwise, et votre approche avec BitConverter prend sorcière tableau d'octets n'est pas pratique dans de nombreux cas.

Le plus commun (et facile) pour effectuer cette - utiliser des opérateurs au niveau du bit:

var r = (high << 8) | low; 

Et rappelez-vous au sujet byte ordering parce que ce n'est pas toujours évidente octet de sorcière est élevée et sorcière est faible.

2

Vous voulez dire quelque chose comme

256 * high + low 

?

1

Juste au cas où quelqu'un d'autre a besoin, je cherchais:

BitConverter.ToInt16 

It takes two bytes and converts them to an integer.

+1

et pourquoi dans le monde auriez-vous besoin que tout c'est ce que je suis intéressé à entendre ... –

+0

@Ed Swangren -.. bonne question Il est malheureusement une longue réponse Si vous lisez cette question, vous verrez ce que je suis en train à faire: http://stackoverflow.com/questions/2657388/opennetcf-signature-control-question (Plus précisément le 3ème commentaire sur cette question) – Vaccano

Questions connexes