Question

J'ai un tableau d'octets contenant 6 octets dont les 2 derniers représentent le numéro de port lors de la recherche d'une méthode permettant de convertir ces derniers en octets en un numéro de port que j'ai rencontré dans cet extrait,



            int port = 0;
        port |= peerList[i+4] & 0xFF;
        port <<= 8;
        port |= peerList[i+5] & 0xFF;

cela fonctionne, mais j’ai besoin de quelques éclaircissements sur son fonctionnement?

Était-ce utile?

La solution

  =======================
  |  byte 5  |  byte 6  |
  |----------|----------|
  | 01010101 | 01010101 |
  =======================

Fondamentalement, il faut l'octet 5, le décalage est de 8 bits à gauche, ce qui donne 0101010100000000 , puis utilise l'opérateur ou au niveau des bits pour mettre l'octet 6 à la place des zéros.

Autres conseils

    int port = 0;                       // Start with zero
    port |= peerList[i+4] & 0xFF;       // Assign first byte to port using bitwise or.
    port <<= 8;                         // Shift the bits left by 8 (so the byte from before is on the correct position)
    port |= peerList[i+5] & 0xFF;       // Assign the second, LSB, byte to port.

Le code prend simplement les 2 derniers octets du tableau et les utilise comme un nombre big-endian.

Habituellement, dans les paquets réseau, le numéro de port est transféré en big-endian (ce qui signifie que l'octet avec l'adresse la plus basse est plus significatif).

Le code prend l'octet numéro i + 4 et l'utilise comme MSB et l'octet i + 5 en tant que LSB du numéro de port.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top