Если кто -то нарушит правила и хотел написать приложение, которое сообщалось, отправляя данные в Little Endian Order вместо заказа сетевых байтов, как это сделать? < /p>
Мои первоначальные мысли - это применение по обе стороны от подключения, чтобы определить, какое упорядочение байтов было скомпилировано, и использовать эту информацию, чтобы вызвать пользовательскую функцию, которая, вероятно, называет внутреннюю часть, такую как одна из Варианты BytesWap (функция GCC /MSVC, которая завершает инструкцию сборки). < /p>
Есть ли лучшая альтернатива? < /p>
< P> Чтобы дать некоторые дальнейшие разъяснения для этого вопроса.
Обычно при написании сетевого приложения, независимо от энджеун целевой машины, можно сделать следующее:
- Будут некоторые данные, которые необходимо отправить /получить из буфера. < /li>
Эти данные могут быть структурой < /код > В стеке, где -то на куче, что бы это ни было. Он будет содержать какой-то тип, такой как int64_t . - Нам нужно отправить эти типы в формате биг-эндэдиана или порядок сетевого байта.
< li> мы используем семейство Hton для преобразования в One Direction и NTOH для преобразования в обратном направлении - Мы записываем некоторые данные в буфер с использованием Эти функции, перед отправкой этих данных с помощью send или выполнять обратную операцию с Recv
Чтобы вернуться к исходному вопросу функций в ntoh и hton , которые выполняют другую альтернативную операцию. htonxxx преобразует Big Endian в Little Endian, а ntohxxx преобразует Little Endian в Big Endian. htonxxx является NOOP, а ntohxxx - NOOP. Курс.
Подробнее здесь: https://stackoverflow.com/questions/794 ... te-order-i