Ordre des octets de réseau de conversion avec le “char”
J'ai toujours appris que si un nombre entier est plus grand qu'un char, vous devez résoudre l'octet de commande de problème. Habituellement, je vais juste l'emballer dans la hton[l|s] et de le convertir en arrière avec ah[l|s]. Mais je ne comprends pas pourquoi cela ne s'applique pas à un octet.
Je suis malade de vous demandez-vous pourquoi il en est, et serait de l'amour pour un chevronné réseaux programmeur pour m'aider à faire la lumière sur pourquoi octet ordre s'appliquent uniquement pour les multi-octets entiers.
Ref: https://beej.us/guide/bgnet/html/multi/htonsman.html
- Apprécier les réponses, avait un de ces "n'h" des moments!
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est endianness.
Un big-endian architecture stocke les octets de la séquence multi-octets type de données comme suit:
tout en un little-endian architecture stocke dans le sens inverse:
Lorsque les données sont transférées à partir d'une machine à une autre, les octets d'un seul type de données doit être réorganisée afin de correspondre au boutisme de la machine de destination.
Mais quand un type de données ne se compose que d'un seul octet, il n'y a rien à réorganiser.
Votre pile de mise en réseau permettra de manipuler les bits à l'intérieur de la octets correctement, vous ne devez vous soucier d'obtenir les octets dans l'ordre.
Exactement combien de façons pouvez-vous commander les octets dans un seul char?
Vous devez tenir compte de ce que chaque fonction n'. De cela, vous devez appliquer ces connaissances à la taille du type que vous avez l'intention de modifier. Considérez les points suivants:
Vous ne lisez pas les bits individuels hors tension du fil, juste octets. Indépendamment de l'endianness, un seul octet est la même avant et en arrière tout comme le mot "je" est le même avant et en arrière.
En plus de toutes les autres manières dont les gens ont dit: Endianness est sur l'ordre des octets dans un entier, et non pas sur l'ordre des bits dans un octet. L'ordre des bits dans un octet est le même, même à travers big-endian et little-endian machines. La seule différence est l'ordre dans lequel les octets sont eux-mêmes utilisés pour stocker un entier (ou court ou avez-vous). Et ainsi, car il n'y a qu'un seul octet dans un char, il n'y a pas de différence dans la façon dont cette valeur est stockée, soit dans un big-endian ou little-endian architecture.
ezpz code est incorrect..
Vous devez utiliser un unsigned int au lieu de sorte qu'il n'est pas interprété comme un signé int