Récemment, j'ai appris un peu de programmation de socket Windows pour réaliser des connexions de socket.
Dans le code, nous utilisons certaines fonctions comme htonl(), htons() pour convertir nos données de l'ordre des octets de l'hôte à l'ordre des octets du réseau, ou ce que l'on appelle big-endian, puisque dans certaines machines, les données sont stockées en little-endian, comme le CPU d'Intel que je connais.
Mais ce que je ne comprends pas, c'est que la chose la plus importante n'est-elle pas l'ordre des bits au lieu des octets ?
Le bit étant l'unité minimale utilisée par les ordinateurs, et non l'octet. Disons que nous voulons transmettre un u_short u=18 à une autre machine par une machine utilisant little-endian.
Dans notre machine, le premier octet de u, le moins significatif est 2 et le second octet, le plus significatif est 1, laissez-moi l'exprimer par [2][1].
Nous devons donc d'abord appeler htons(u) pour convertir [2][1] en [1][2] et l'envoyer au réseau.
La machine distante recevra 2 en premier, mais 2 est exprimé par une séquence de bits que la machine reçoit effectivement sont 0000-0010, comment la machine sait-elle que cet octet est 2 ? Ne va-t-elle pas penser que 0000-0010 représente 64 ? (0100-0000) Toutes les machines stockent-elles les octets de la même manière ?