Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wchar_t и кроссплатформенное программирование 
:(
    Опции темы
dfHunter
Дата 16.11.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



разрабатываю кроссплатформенное сетевое приложение
дело в том, что протокол уже сформирован и сообщения передаются в UTF16
с виндой понятное дело проблем нет, но вот *nix системах wchar_t имеет размер 4 байта
есть ли какие-нибудь либы для работы с 2 байтовым типом или какие то альтернативные решения
сейчас как вариант вижу только добавление в пакет только 2 байтов из 4 для линукса, но возможно это не самый оптимальный способ(особенно для строк больших размеров), т.к. приложение очень требовательно к быстродействию
PM MAIL   Вверх
null56
Дата 16.11.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



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

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, каждый раз, когда читаешь символы...
PM MAIL   Вверх
dfHunter
Дата 16.11.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



а каким образом я буду записывать её в буффер?
если я попытаюсь целиком строку записать, то у меня получится что например строка GG запишется как
47 47 00 00 47 47 00 00 00 00 00 00
когда надо записать
47 47 47 47 00 00
я говорю о том, что прийдётся побайтово записывать только первые 2 из 4 байтов, что бы получить 2ой вариант в линуксе, когда в винде я мог бы просто воспользоваться memcpy для переноса строки в буффер
PM MAIL   Вверх
Quartz
Дата 17.11.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.6.2008

Репутация: нет
Всего: 4



PM MAIL   Вверх
dfHunter
Дата 18.11.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Цитата(Quartz @ 17.11.2009,  23:54)
Здесь обсуждалось

спасибо
PM MAIL   Вверх
dfHunter
Дата 18.11.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



появилась новая проблема
функции для wchar_t все написаны для 32битного
ну то есть wcslen возвращает не корректные значения
а где взять для 16битного?
PM MAIL   Вверх
null56
Дата 18.11.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



а 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.


Это сообщение отредактировал(а) null56 - 18.11.2009, 20:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1052 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.