Je ne suis pas sûr pourquoi htons
et ntohs
existent tous deux dans la bibliothèque standard. Ils font exactement la même chose - sauf si je suis confus en quelque sorte! Il en va de même pour htonl
et ntohl
.Pourquoi `htons` et` ntohs` existent-ils?
4
A
Répondre
7
Ils font pour le code d'auto-documentation qui indique au lecteur si les données sont dans l'ordre de l'hôte ou du réseau.
5
Ceci est dans le cas où une machine a une sorte de endianness inhabituelle en plus de big-endian ou little-endian qui n'est pas un ou plusieurs swaps d'octets simples.
Par exemple, si la valeur 0x0A0B0C0D
était représentée en interne comme 0B 0C 0D 0A
, en faisant passer cette représentation à htonl
reviendrait 0x0A0B0C0D
mais ntohl
retournerait 0x0C0D0A0B
.
Je ne connais pas de plates-formes qui ont une telle représentation, mais la présence de fonctions séparées pour l'hôte-à-réseau et d'un-à-un-réseau permet la possibilité.
Je pensais à ce cas aussi, mais je me suis abstenu d'écrire une réponse car *** l'ordre des octets *** asymétrique est quelque chose pour les concepteurs de puces excentriques sur dope ... ;-) – alk