Я хочу использовать функцию htonl
в моем расширении ruby c, но не хочу использовать какой-либо другой материал, который поставляется с ним. Какой был бы самый минималистический файл для #include
, который по-прежнему переносится? Просматривая заголовочные файлы на моем компьютере, я вижу, что либо machine/endian.h
, либо sys/_endian.h
позволили бы мне использовать их, хотя я не уверен, что это хорошая идея.Что мне следует включить # для использования 'htonl'?
ответ
Заголовок standard является:
#include <arpa/inet.h>
Вам не придется беспокоиться о других вещей, определенных в этом заголовке. Он не повлияет на ваш скомпилированный код и должен иметь лишь незначительный эффект на время компиляции.
EDIT: Вы можете проверить это. Создать два файла, 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);
}
и htonl_include.c:
// portable
#include <arpa/inet.h>
#include <stdio.h>
int main()
{
int x = 1;
x = htonl(x);
printf("%d\n", x);
}
Соберите их в -O1, а затем взять разницу:
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
Для меня, единственное различие это имя файла.
Если вы не хотите включать что-либо связанное с сетью, то это совершенно справедливо для объявления htonl
. Просто #include <stdint.h>
получить uint32_t
и использовать следующий прототип:
uint32_t htonl(uint32_t);
Ссылка: POSIX: http://www.opengroup.org/onlinepubs/9699919799/functions/htonl.html
Вы также можете просто реализовать свой собственный по заказу тестирования байт (при compiletime) с помощью союзов. Это не требует каких-либо нечетных макросов ENDIAN или #ifdefs.
- 1. Что мне нужно включить для использования OpenClipboard()?
- 2. Что мне следует включить в метод startactivity?
- 3. Преобразование из void * для использования htonl
- 4. Delphi XE4 Что мне нужно включить для использования функции FmxHandleToObjC
- 5. В Rails мне следует включить serve_static_assets?
- 6. Что мне следует вводить для такой функции?
- 7. Какой заголовочный файл следует включить для использования _swprintf_s()?
- 8. Что мне нужно для использования класса Transfer?
- 9. Что мне нужно установить для использования OraOLEDB
- 10. Что мне следует вводить в контроллеры WebAPI?
- 11. Что мне следует узнать дальше? (Кодирование)
- 12. Написание генератора SQL, что мне следует читать?
- 13. Что мне следует включить в файл .gitignore для игровых площадок Swift?
- 14. Что мне следует кодировать в «основном» методе?
- 15. Что мне следует переходить в GoogleAnalyticsTracker.startSession()
- 16. Какой файл мне нужно включить для использования браузера
- 17. JavaScript-эквивалент htonl?
- 18. Мне нужно включить файл версии jquery для использования jquery.ui.js?
- 19. Диаграмма использования использования - Включить взаимосвязь
- 20. Что мне следует использовать для реализации функции списка в GWT
- 21. Что мне следует учитывать при разработке для ios4
- 22. Что мне следует вернуть в представленииIndexForPageViewController: для моего UIPageViewControllerDataSource?
- 23. Получение ошибки для строки кода. Что мне следует импортировать?
- 24. Понимание htonl() и ntohl()
- 25. Java Реализация Htonl
- 26. WINVER, winsock и htonl()
- 27. htonl() vs __builtin_bswap32()
- 28. Смущенный о выходе htonl
- 29. Что мне следует включить с помощью mergExt mergSettings в моем приложении Livecode
- 30. Что мне нужно включить в программу C для использования системных вызовов POSIX?
Спасибо! Я не знал, что это не изменит скомпилированный код. Прежде чем вы ответили, я подумывал о написании своей собственной версии, чтобы мой код оставался небольшим. – Adrian