Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Кроссплатформенность битовых операций

#cpp #битовые_операции #кроссплатформенность


Как добиться кроссплатформенности при сериализации, работе напрямую с битами, составления
пакетов для отправки между классами при условии, что битовые манипуляции должны быть
верны при little endian и big endian.
    


Ответы

Ответ 1



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

Ответ 2



В полях структур, используемых для обмена, храните данные в сетевом формате (network order, подробнее можете посмотреть здесь). Для преобразования данных между сетевым форматом и форматом хоста можно использовать функции htons()/htonl()/ntohs()/ntohl() из Berkeley sockets API.

Ответ 3



Внутри байта биты всегда идут слева направо от старшего к младшему, независимо от принятого порядка байтов в системе. То же самое касается операндов у операторов >> <<, даже если это числа, состоящие из больше чем 1-го байта. То есть int i=4; i>>=1; i всегда будет равно 2. Для кроссплатформенной (де)сериализации можно использовать htons()/htonl()/ntohs()/ntohl()

Комментариев нет:

Отправить комментарий