Работа с октет-байтами из сети на архит. с 16битными байтами
От: makdak  
Дата: 30.05.10 15:10
Оценка: :))) :)
Всем привет!
Мужики, ответьте на пару вопросов, пожалуйста.


Приходят от сервера (он с 16 битными байтами) данные через сокет и кладутся клиенту в char in_buff[...] (клиент с обычной архитектурой, 8 битными байтами). Что будет в in_buff если сервер отправит строчку (char*)"Hello"?

Или не стоит искать грабли там где их нет?
Re: Работа с октет-байтами из сети на архит. с 16битными бай
От: Pavel Dvorkin Россия  
Дата: 30.05.10 15:31
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>Приходят от сервера (он с 16 битными байтами) данные через сокет и кладутся клиенту в char in_buff[...] (клиент с обычной архитектурой, 8 битными байтами). Что будет в in_buff если сервер отправит строчку (char*)"Hello"?


Что за 16-битные байты такие ? Как в них кодируются символы ? Если Unicode — получишь набор байтов в количестве 12 штук, каждый из них — очередной символ, в конце 16-битный 0. А куда ты их кладешь — дело твое.
With best regards
Pavel Dvorkin
Re: Работа с октет-байтами из сети на архит. с 16битными бай
От: Кодт Россия  
Дата: 31.05.10 09:26
Оценка: 3 (1) +1
Здравствуйте, 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)
Последнее может запросто возникнуть, если сервер не хочет выжимать соки и упаковывать символы в поток битов. Подобно тому, как на октетных платформах шестнадцатиричные числа записываются в строку — по одной цифре на символ (хотя можно было бы и по две запаковать).
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.