2010-08-08 3 views
1

J'essaie de convertir une chaîne big-endian de 2 octets en un numéro de port numérique. Je l'ai déjà obtenu un code, mais je ne sais pas si elle a raison:Déballage du numéro de port codé big-endian

from struct import unpack 
def unpack_port(big_endian-port): 
    return unpack("!H", big_endian-port)[0] 

Le port (en utilisant Python rééd()) est \ X1A \ XE1, et je reçois 6881 de cette fonction.

Est-ce correct?

+0

"La forme '!' est disponible pour ces pauvres âmes qui prétendent ne pas pouvoir se souvenir si l'ordre des octets du réseau est big-endian ou little-endian. - Un peu [struct documentation] (http://docs.python.org/library/struct.html) humour. :) – Seth

Répondre

3

Oui, '!' est le caractère qui indique' ordre des octets réseau ', et 'H' indique '16 -bit entier non signé', donc votre code est correct. 6881 est généralement un port Bittorrent. Dans ce cas, je crois '!' est le caractère correct. Comme c'est un numéro de port, je m'attends à ce que vos données proviennent d'un réseau. Mais, si vous saviez que vos données sont big-endian pour une autre raison, '>' pourrait être plus approprié. Ils veulent dire exactement la même chose et le feront toujours. Il s'agit plus de commenter votre code pour indiquer l'intention que n'importe quelle différence sémantique.

+0

Merci. Je n'étais pas sûr d'avoir bien mis le drapeau de formatage. –

Questions connexes