Когда и как использовать функцию C++ htonl

cout << "Hello World !" << endl;

Для моего самого первого сообщения о переполнении стека: когда мы должны использовать функцию htonl? Я просмотрел справочную страницу. Однако я не очень понимаю, когда и как его использовать.


person json27    schedule 22.05.2015    source источник
comment
Всякий раз, когда вы отправляете 4-байтовое значение на другую машину. Затем принимающая машина использует ntohl для восстановления значения.   -  person jxh    schedule 22.05.2015
comment
Вам это нужно только в том случае, если вы занимаетесь сетевым программированием или делитесь двоичными данными между различными компьютерными архитектурами. Существует дополнительная функция ntohl, которая на самом деле является -byte-o">та же функция, что и htonl на той же платформе. Также есть htons и ntohs для 2-байтовых значений.   -  person selbie    schedule 22.05.2015
comment
Стоит отметить, что многие современные приложения передают данные в текстовом виде, например, с помощью XML через HTTP. Но низкоуровневое программирование будет предоставлять данные в двоичном виде, а мир вычислений по-прежнему неоднороден.   -  person jxh    schedule 22.05.2015
comment
Спасибо за всю полезную информацию!   -  person json27    schedule 22.05.2015


Ответы (1)


Host TO Nсетевой перевод. Это гарантирует, что endian 32-битного значения данных является правильным (Big endian) для сетевого транспорта. . ntohl -- Nnetwork TO Host -- используется получателем, чтобы гарантировать правильность порядка байтов для процессора получателя. Следите за htons и ntohs для обработки 16 бит, и где-то там, вероятно, htonll и ntohll для 64 бит.

Использовать их все так же просто, как передать число, которое вы хотите преобразовать, и получить преобразованное число. Вы можете обнаружить, что на некоторых процессорах абсолютно ничего не происходит, потому что их порядок байтов уже большой.

uint32_t inval = 0xAABBCCDD;
uint32_t outval = htonl(inval);

На большинстве настольных компьютеров приведет к тому, что outval будет установлен на 0xDDCCBBAA

person user4581301    schedule 22.05.2015