Desidero utilizzare la funzione htonl
nell'estensione Ruby c, ma non voglio utilizzare nessuna delle altre risorse Internet fornite con esso. Quale sarebbe il file più minimalista per #include
che è ancora portatile? Guardando attraverso i file di intestazione sul mio computer, posso vedere che sia machine/endian.h
o sys/_endian.h
mi permettessero di usarli, anche se non sono sicuro che sia una buona idea.Che cosa dovrei # include usare 'htonl'?
risposta
L'intestazione standard è:
#include <arpa/inet.h>
Non devi preoccuparti per le altre cose definita in quel colpo di testa. Non influenzerà il tuo codice compilato e dovrebbe avere solo un piccolo effetto sul tempo di compilazione.
MODIFICA: è possibile verificare questo. Creare due file, 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);
}
e htonl_include.c:
// portable
#include <arpa/inet.h>
#include <stdio.h>
int main()
{
int x = 1;
x = htonl(x);
printf("%d\n", x);
}
assemblarli in -O1, poi prendere la differenza:
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
Per me, l'unica differenza è il nome del file.
Se non si desidera includere nulla relativo alla rete, è perfettamente valido dichiarare lo htonl
. Basta #include <stdint.h>
per ottenere uint32_t
e utilizzare il seguente prototipo:
uint32_t htonl(uint32_t);
Riferimento: POSIX: http://www.opengroup.org/onlinepubs/9699919799/functions/htonl.html
È anche possibile implementare il proprio ordine per il test di byte (a compiletime) con i sindacati. Questo non richiede alcuna macro ENDIAN o #ifdefs.
- 1. Che cosa gacutil.exe dovrei usare?
- 2. Che cosa dovrei usare IronPython IDE?
- 3. Registrazione C#. Cosa dovrei usare?
- 4. Cosa dovrei usare al posto di LoadWithPartialName()?
- 5. Che cosa include esattamente currentDesign.writeCssincludes?
- 6. Dato che Python non ha un'istruzione switch, cosa dovrei usare?
- 7. Che Game Engine dovrei usare?
- 8. Toolkit Gui, che dovrei usare?
- 9. Cosa dovrei usare come manichino attendibile?
- 10. Per cosa dovrei usare Stackless Python?
- 11. Cosa dovrei usare al posto di sscanf?
- 12. Cosa dovrei usare al posto di com.google.appengine.repackaged *?
- 13. Quando dovrei usare le parentesi nelle istruzioni require/include?
- 14. Cosa non dovrei includere nel blocco `include do ... end`?
- 15. Char.Equals vs Object.Equals - ReSharper suggerisce che dovrei usare Object.Equals. Dovrei?
- 16. "base.send: include, InstanceMethods" ---> Che cosa fa?
- 17. Che gui toolkit dovrei usare con Pygame?
- 18. Che tipo di collezione dovrei usare?
- 19. Che cosa dovrei imparare dopo PHP?
- 20. Comprensione di htonl() e ntohl()
- 21. quale algoritmo dovrei usare?
- 22. Cosa dovrei usare come file config/settings con preludio emacs?
- 23. Float.equals (quasi) completamente inutile e cosa dovrei usare invece?
- 24. Cosa dovrei usare al posto di windows.h in linux
- 25. cosa dovrei usare try e catch block o onerror event
- 26. Cosa dovrei usare al posto di UISegmentedControlStyleBezeled deprecato in iOS5.1?
- 27. Cosa dovrei usare in Prism-MEF o Unity?
- 28. Scala 2.11 LinkedList è deprecato, cosa dovrei usare?
- 29. Cosa dovrei usare al posto di syncdb in Django 1.9?
- 30. cosa dovrei usare eclipse rcp o eclipse scout?
Grazie! Non sapevo che non avrebbe cambiato il codice compilato. Prima che tu rispondessi, stavo pensando di scrivere la mia versione solo in modo che il mio codice potesse rimanere piccolo. – Adrian