С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
#1

Wchar_t - C++

21.04.2014, 21:51. Просмотров 1385. Ответов 45
Метки нет (Все метки)

подключаюсь к серверу. Присваиваю переменной типа string имя,
C++
1
const char* charName = _Name.c_str();
затем в цикле передаю серверу имя клиента, в цикле делаю следующее:
C++
1
2
3
 
Client.send_data(charName[i]);
cout<<*charName[i];
выводит :
98Data send
32767Data send
-268434792Data send
32767Data send
-1Data send
0Data send
а в имени записано : breathe
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 21:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Wchar_t (C++):

Почему const wchar_t* воспринимается как wchar_t* ? - C++
Здравствуйте. Я написал вот так: const wchar_t* dir = directory.c_str(); StartModule(dir); и такая ошибка появляется : ...

Wchar_t и unsigned wchar_t в windows - C++
Печально, но факт: wchar_t - 2 байта, unsigned wchar_t - 4 байта Вопрос1: используется ли unsigned wchar_t для хранения...

Cannot convert from 'wchar_t' to 'const wchar_t *' - C++
такой код, порылся в инете не помогло. ломать голову надоело может кто подскажет, буду благодарен. wchar_t * english = L&quot;abvgdee...

Error C2664: невозможно преобразовать из "wchar_t" в "const wchar_t *" - C++
Вот так работает: wchar_t buf; Edit_GetText(hE, buf, sizeof(buf)); if(buf) { wchar_t b; _itow_s(wcscspn(buf, &amp;buf), b, 10); ...

CP886 в Multibyte (wchar_t) и BYTE в Multibyte (wchar_t) - C++
Помогите разобраться с кодировками. Получаю из базы данных значения и при выводи их в EditControl все отлично, но если выводить данные в...

Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| - C++
Ругается на строку Log&lt;&lt;StripXML(__PRETTY_FUNCTION__)&lt;&lt;std::endl;. Функция такая: std::string StripXML ...

45
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.04.2014, 22:32 #2
diplomat1129, как это у вас компилируется?
C++
1
cout<<*charName[i];
Помимо этого, указатель на си-строку, возвращаемый c_str() валиден только до изменения или уничтожения строки std::string.
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
21.04.2014, 22:34  [ТС] #3
Строка не меняется в ходе вывода букв, и без указателя выводится тоже самое
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.04.2014, 22:40 #4
diplomat1129, почему бы не использовать сразу элементы строки?
_Name[i];
И кстати, имена, начинающиеся с подчеркивания (и с последующей заглавной буквой) зарезервированы для служебного использования.
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
21.04.2014, 22:42  [ТС] #5
МНе на сервер нужнр передавать 2-х байтные значения. Поэтому и выбрал wchar_t. Т.е. каждую букву нужно привести к 2-х байтному виду
0
nmcf
5698 / 5009 / 1711
Регистрация: 14.04.2014
Сообщений: 20,453
21.04.2014, 23:01 #6
Где у тебя wchar_t? В примере нет.
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
21.04.2014, 23:04  [ТС] #7
C++
1
2
3
4
5
byte tmp = (byte)charName[i];
                    vector<byte> buf;
                    buf.push_back(tmp);
                    Client.send_data(buf[i]);
                    cout<<buf[i];
Этот код выводит тоже самое
Byte - wchar_t
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 05:23 #8
Что нужно непонятно.
Цитата Сообщение от diplomat1129 Посмотреть сообщение
C++
1
cout<<buf[i];
Для широких символов используется wcout.
C++
1
2
3
wstring Name;
const byte* charName;
// и т.д.
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
22.04.2014, 09:14  [ТС] #9
Нужно передавать с клиента wchar переменные. Потому что сервер писал не я и мне сказали пересылать 2-х байтные значения букв. cout в принципе не нужен, я это делал чтобы посмотреть что выведет. Попробую ваш способ.

Добавлено через 2 минуты
Т.е. мне надо делать изначально переменную не string, а wstring ? Чтобы потом заносить отдельные буквы в переменные типа wchar, перед передачей на сервер ? И эти wchar переменные будут по 2 байта, правильно ?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 09:15 #10
Цитата Сообщение от diplomat1129 Посмотреть сообщение
cout в принципе не нужен, я это делал чтобы посмотреть что выведет.
cout будет чушь выдавать (wcout нужен). Реализация send_data() под широкие символы сделана?

Добавлено через 49 секунд
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Чтобы потом заносить отдельные буквы в переменные типа wchar,
Можно просто из wstring брать, через индекс.
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
22.04.2014, 09:16  [ТС] #11
Пока нет, но я сделаю. Там получается TCP протокол реализован и идет преобразование к string помоему. Ну дальше я уже буду смотреть. Пока на этом этапе надо решить задачу

Добавлено через 36 секунд
Было бы отлично по индексу сразу брать.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 09:18 #12
Вот это непонятно:
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Пока нет, но я сделаю.
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Пока на этом этапе надо решить задачу
На каком на этом, и в чём задача?
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
22.04.2014, 09:19  [ТС] #13
send_data пока умеет принимать string и vactor<byte> т.е. метод перегружен. и эти методы реализованы уже.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 09:23 #14
Цитата Сообщение от diplomat1129 Посмотреть сообщение
send_data пока умеет принимать string и vactor<byte>
Ничего не пойму... А зачем же вы передаёте, в этот метод wchar_t, ?
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
22.04.2014, 09:24  [ТС] #15
Мне надо на сервер передавать по 2 байта значения. Вот надо чтобы каждая буква в слове весила по 2 байта
0
22.04.2014, 09:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 09:24
Привет! Вот еще темы с ответами:

wchar_t - C++
что ето за тип данних: wchar_t скок у нему байт??

wchar_t в string - C++
Собственно, как можно преобразовать wchar_t* в string?

Непонятки с wchar_t - C++
Прошу помощи: что-то не так с wchar_t. Не копирует имена файлов. Содержание program_config.txt config.cfg C:\\Projects\\abx.txt...

Чтение wchar_t - C++
читаю из файла строку wchar_t символов, почему читается какая то хрень?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.