Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > wchar_t и кроссплатформенное программирование


Автор: dfHunter 16.11.2009, 11:15
разрабатываю кроссплатформенное сетевое приложение
дело в том, что протокол уже сформирован и сообщения передаются в UTF16
с виндой понятное дело проблем нет, но вот *nix системах wchar_t имеет размер 4 байта
есть ли какие-нибудь либы для работы с 2 байтовым типом или какие то альтернативные решения
сейчас как вариант вижу только добавление в пакет только 2 байтов из 4 для линукса, но возможно это не самый оптимальный способ(особенно для строк больших размеров), т.к. приложение очень требовательно к быстродействию

Автор: null56 16.11.2009, 16:02
Изменение размера под линух этого типа данных связано с новой спецификацией юникода.... 
Цитата

Wide character support doesn't change the meaning of plain <tt>char</tt>. Also, note that on windows sizeof(wchar_t)==2 and on linux sizeof(wchar_t)==4, as dictated by the up-to-date Unicode spec. Saving it directly to a file might lead to incompatibilities -- but most often it's converted to utf-8 anyway.

Если вопрос стоит в быстродействии, то не изобретай велосипед, ты работаешь с ютф16, значит всё у тебя умещается под виндовый и линуховый вариант. Работай также, как и под виндой... так будет более кроссплатформенно и по быстродействию куда быстрее, нежели отделение 2 байт из 4, каждый раз, когда читаешь символы...

Автор: dfHunter 16.11.2009, 19:03
а каким образом я буду записывать её в буффер?
если я попытаюсь целиком строку записать, то у меня получится что например строка GG запишется как
47 47 00 00 47 47 00 00 00 00 00 00
когда надо записать
47 47 47 47 00 00
я говорю о том, что прийдётся побайтово записывать только первые 2 из 4 байтов, что бы получить 2ой вариант в линуксе, когда в винде я мог бы просто воспользоваться memcpy для переноса строки в буффер

Автор: Quartz 17.11.2009, 23:54
http://forum.vingrad.ru/forum/topic-249965/anchor-entry1805854/0.html

Автор: dfHunter 18.11.2009, 00:36
Цитата(Quartz @ 17.11.2009,  23:54)
http://forum.vingrad.ru/forum/topic-249965/anchor-entry1805854/0.html

спасибо

Автор: dfHunter 18.11.2009, 18:59
появилась новая проблема
функции для wchar_t все написаны для 32битного
ну то есть wcslen возвращает не корректные значения
а где взять для 16битного?

Автор: null56 18.11.2009, 20:34
а stl тоже работает неправильно (std :: wstring)?
Код

size_t size() const;

Return length of string
Returns a count of the number of characters in the string.

string::length is an alias of string::size, returning both the exact same value.

size_t length() const;

Return length of string
Returns a count of the number of characters in the string.

string::length is an alias of string::size, returning both the exact same value.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)