Preguntas sobre el uso de la función htonl() en vc++
El llamado orden de bytes de red (big endian) se refiere al "de mayor a menor, de menor a mayor" cuando un número se almacena en la memoria (es decir, el byte mayor de un número se almacena en la unidad de dirección baja, el byte bajo se almacena en la unidad de dirección alta). Sin embargo, la memoria de una computadora puede almacenar datos en orden big-endian o little-endian.
Primero déjame darte un ejemplo:
int a = 0x 403214;
int b = ht onl(a); Depuré este código con VC++6.0 y descubrí que el valor de
& ampa es 0x0012ff44.
Entre ellos, los valores de 0x0012ff44, 0x0012ff45, 0x0012ff46 y 0x 012ff 47 son: 14, 32, 40, 00 respectivamente, es decir, 0x403265438+.
&El valor de ampb es 0x0012ff40.
Entre ellos, los valores de 0x0012ff40, 0x0012ff438+0, 0x0012ff42 y 0x 012ff 43 son: 00, 40, 32, 14, es decir, el número original es 0x40.
Se puede ver que si un número se almacena en orden little-endian, entonces el byte de orden superior del número se revertirá completamente en un nuevo número después de ser llamado por la función htonl. Este nuevo número en realidad se almacena en la máquina en orden little-endian, pero en comparación con el número original, es equivalente a un orden big-endian.
El tipo largo 0x40 se escribe como: 0x 00 00 00 40, * * cuatro bytes después de llamar a htonl, los cuatro bytes son a su vez 0x4000000.
De manera similar, 0x 00 00 00 40 se convierte en 0x0000 40, que es 0x40, después de llamar a htonl.
Si tienes alguna pregunta sobre mi respuesta, puedes llamarme y continuaremos la discusión.