Преобразование порядка байтов требуется для wchar_t данных?

решаемые. Учетные данные - karaf / karaf, поскольку я по умолчанию использую область 'karaf', которая поставляется с установкой по умолчанию Apache Karaf.

7
задан An̲̳̳drew 7 January 2009 в 18:47
поделиться

3 ответа

Да необходимо будет подкачать их.
Байты будут получены от транспорта в том же порядке, в который они были вставлены. Только в другом конце упорядочивание этих байтов имеет другое значение. Таким образом, необходимо преобразовать их в корректный порядок байтов (который является словом?).

Испытанный и истинный метод должен преобразовать в сетевой порядок байтов перед транспортом. Затем преобразуйте назад для хостинга определенного порядка байтов (от сетевого порядка байтов) по получении.

Ряд функции для помощи с преобразованием порядка байтов:

ntohs   Convert a 16-bit quantity from network byte order to host byte order
ntohl   Convert a 32-bit quantity from network byte order to host byte order
htons   Convert a 16-bit quantity from host byte order to network byte order
htonl   Convert a 32-bit quantity from host byte order to network byte order

Только добавить другое предупреждение.
Различные системы используют другой размер для wchar_t, так не принимайте sizeof (wchar_t) == 2.

Дополнительно каждый хост может использовать различный представительный формат для wchar_t.
Чтобы помочь иметь дело с этим, большинство систем преобразовывает текст в известный формат для транспорта (UTF-8, или UTF-16 являются хорошим выбором). Преобразование текст назад к хосту определенный формат в другом конце.

Вы могли посмотреть на icu IBM, это имеет всю эту функциональность.

9
ответ дан 6 December 2019 в 15:36
поделиться

Преобразование порядка байтов не достаточно и как следствие не нужно. Sizeof(wchar_t) отличается, и поэтому кодирование также. Следовательно, необходимо договориться о формате обмена. Логический выбор является UTF-8. Но так как UTF-8 является байтовым, у Вас больше нет проблем порядка байтов.

5
ответ дан 6 December 2019 в 15:36
поделиться

Да, необходимо выполнить преобразование порядка байтов. Определите тщательно свой формат сериализации, т.е. порядок байтов данных, которые передаются по сети или хранятся в дисковый файл. Затем при отправке данных преобразуйте от собственного компонента для проводного соединения формата (можете, или может не потребовать свопинга байта), и при получении данных преобразуйте от провода до собственного формата (снова может или может не потребовать свопинга байта). Необходимо выбрать проводной формат, который будет использоваться большинством клиентов для уменьшения средней суммы свопинга байта.

0
ответ дан 6 December 2019 в 15:36
поделиться