Quiero usar la función htonl
en mi extensión ruby c, pero no quiero usar ninguna de las otras cosas de Internet que vienen con ella. ¿Cuál sería el archivo más minimalista en #include
que todavía es portátil? Al mirar a través de los archivos de cabecera en mi computadora, puedo ver que machine/endian.h
o sys/_endian.h
me permiten usarlos, aunque no estoy seguro de si es una buena idea.¿Qué debo #incluir para usar 'htonl'?
Respuesta
La cabecera es standard:
#include <arpa/inet.h>
Usted no tiene que preocuparse de las otras cosas que se define en la cabecera. No afectará su código compilado, y debería tener solo un efecto menor en el tiempo de compilación.
EDITAR: Puede probar esto. Crear dos archivos, htonl_manual.c
// non-portable, minimalistic header
#include <byteswap.h>
#include <stdio.h>
int main()
{
int x = 1;
x = __bswap_32(x);
printf("%d\n", x);
}
y htonl_include.c:
// portable
#include <arpa/inet.h>
#include <stdio.h>
int main()
{
int x = 1;
x = htonl(x);
printf("%d\n", x);
}
ensamblarlos en -O1, luego tomar la diferencia:
gcc htonl_manual.c -o htonl_manual.s -S -O1
gcc htonl_include.c -o htonl_include.s -S -O1
diff htonl_include.s htonl_manual.s
Para mí, la única diferencia es el nombre del archivo
Si no desea incluir nada relacionado con la red, es perfectamente válido declarar htonl
usted mismo. Sólo #include <stdint.h>
para obtener uint32_t
y utilizar el siguiente prototipo:
uint32_t htonl(uint32_t);
Referencia: POSIX: http://www.opengroup.org/onlinepubs/9699919799/functions/htonl.html
Puede también acaba de poner en práctica su propia por orden de bytes de la prueba (en tiempo de compilación) utilizando uniones. Esto no requiere ninguna ENDREGIA macros o #ifdefs.
- 1. ¿Qué archivo de encabezado debo incluir para usar _swprintf_s()?
- 2. ¿Qué debo incluir en mi archivo de cabecera para ostream
- 3. ¿Qué encabezado debo incluir para memcpy y realloc?
- 4. ¿Qué DB debo usar?
- 5. ¿Qué jar debo incluir para usar el paquete javax.persistence en una aplicación basada en hibernación?
- 6. ¿Qué metainformaciones debo usar?
- 7. ¿Qué debo hacer para usar Guice?
- 8. ¿Qué controlador mongo para nodo debo usar?
- 9. ¿Qué debo codificar para usar HTTPS?
- 10. ¿Qué debo instalar para usar OraOLEDB
- 11. Gui toolkits, ¿qué debo usar?
- 12. (¿Por qué) debo usar ofuscación?
- 13. OAuth/OpenID: ¿qué debo usar?
- 14. ¿El impulso tiene forma portátil para usar las funciones de tipo ntohl/htonl/ntohs/htons?
- 15. ¿Qué almacenamiento debo usar para un plugin de outlook?
- 16. ¿Qué debo usar para la autenticación de usuario en PHP?
- 17. ¿Qué contenedor STL debo usar para un FIFO?
- 18. ¿Qué tipo de datos XML debo usar para moneda/dinero?
- 19. ¿Qué biblioteca debo usar para generar RSS en Common Lisp?
- 20. ¿Qué patrón (s) arquitectónico (s) debo usar para mi RIA?
- 21. IE no admite altura = automático para imágenes, ¿qué debo usar?
- 22. ¿Qué idiomas y bibliotecas debo usar para trabajar con Gmail?
- 23. ¿Qué tipo de datos debo usar para almacenar valores monetarios?
- 24. ¿Para qué debo usar los dedos de Clojure?
- 25. ¿Qué enfoque debo usar para el script de C#?
- 26. ¿Qué tipo de variable debo usar para guardar una imagen?
- 27. ¿Qué codificación debo usar para un HTTP PUT?
- 28. ¿Qué biblioteca C++ debo usar para implementar un cliente HTTP?
- 29. Qué tipo debo usar para una variable de índice
- 30. ¿Qué debo usar para una clase BigInt en .NET?
Gracias! No sabía que no cambiaría el código compilado. Antes de responder, estaba considerando escribir mi propia versión solo para que mi código pudiera ser pequeño. – Adrian