Всем привет!
Мужики, ответьте на пару вопросов, пожалуйста.
Приходят от сервера (он с 16 битными байтами) данные через сокет и кладутся клиенту в char in_buff[...] (клиент с обычной архитектурой, 8 битными байтами). Что будет в in_buff если сервер отправит строчку (char*)"Hello"?
Или не стоит искать грабли там где их нет?
Re: Работа с октет-байтами из сети на архит. с 16битными бай
Здравствуйте, makdak, Вы писали:
M>Приходят от сервера (он с 16 битными байтами) данные через сокет и кладутся клиенту в char in_buff[...] (клиент с обычной архитектурой, 8 битными байтами). Что будет в in_buff если сервер отправит строчку (char*)"Hello"?
Что за 16-битные байты такие ? Как в них кодируются символы ? Если Unicode — получишь набор байтов в количестве 12 штук, каждый из них — очередной символ, в конце 16-битный 0. А куда ты их кладешь — дело твое.
With best regards
Pavel Dvorkin
Re: Работа с октет-байтами из сети на архит. с 16битными бай
Здравствуйте, makdak, Вы писали:
M>Приходят от сервера (он с 16 битными байтами) данные через сокет и кладутся клиенту в char in_buff[...] (клиент с обычной архитектурой, 8 битными байтами). Что будет в in_buff если сервер отправит строчку (char*)"Hello"?
Сеть тем и хороша, что абстрагирует платформы друг от друга.
Если сервер позволяет себе вольности отсылать данные в родном для себя формате (на котором CHAR_BITS=16), где-то (в сетевой карте, что ли?) переделывая каждый ворд в два октета, — значит, нужно в спецификации протокола отметить: ага, строки нам приходят в (мульти)вордовой кодировке.
Дальше уже нужно смотреть, что это за кодировка такая.
— UCS-2 LE (младшим октетом вперёд)
— UCS-2 BE (старшим октетом вперёд)
— UTF-16 LE, UTF-16 BE (аналогично UCS, только с возможностью мультивордовых символов)
— UTF-8 или любая другая (мульти)байтовая кодировка поверх вордовой (опять же, LE или BE)
Последнее может запросто возникнуть, если сервер не хочет выжимать соки и упаковывать символы в поток битов. Подобно тому, как на октетных платформах шестнадцатиричные числа записываются в строку — по одной цифре на символ (хотя можно было бы и по две запаковать).