| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > wchar_t |
| Автор: vikaz 9.2.2007, 12:16 |
| Ребят, как узнать длину строки wchar_t? wchar_t *qwe; Стандартные методы не подходят! заранее спасибо! |
| Автор: Anikmar 9.2.2007, 12:19 |
| wcslen не подойдет? |
| Автор: vikaz 9.2.2007, 12:24 |
| Да подошел! Большое человеческое спасибо! А что это за переменная? Просто мне модуль готовый дали, а там этот тип! Где можно найти информацию, какие команды применимы к этому типу, и т.д. и т.п? |
| Автор: Anikmar 9.2.2007, 12:34 |
| wchar_t - это "широкие символы". Т.е не char, а по сути int - кодировка Unicode |
| Автор: AndAnd 9.2.2007, 12:35 | ||
Примерно вот это:
|
| Автор: HappyLife 9.2.2007, 12:39 |
| Это переменная Юникода. два байта - один символ. |
| Автор: vikaz 9.2.2007, 14:33 |
| примерно понятно, спасибо всем!!! |
| Автор: myk 2.3.2009, 12:29 |
| а я не понял)=. можно обьяснить или дать почитать как этими типами строковыми оперировать. вот к примеру с екселем мучаюсь. Cur=sheet.OlePropertyGet("Cells",index,j); Cur.OlePropertySet("Value",DBGrid1->Fields[j-1]->AsString.c_str()); неробит когда мучаюсь с fopen(SaveDialog1->FileName.c_str(),"w"); неробит )= запарили эти widestring unicodestring wchar_t разъясните пожалуйста. в 6 билдере AnsiString.c_str() приводил к char, а в билдере 2009 к wchar_t. |
| Автор: Alexeis 2.3.2009, 14:02 |
| wchar_t может быть либо 2 либо 4 байта, потому нужно всегда проверять. В Билдере String это unicodestring строка из wchar_t символов wchar_t это аналог char только размером не байт. Если нужно ему присвоить значение то это будет выглядеть так wchar_t ch = L'C'; Если это строка wchar_t *ch = L"Строка"; |
| Автор: myk 2.3.2009, 14:11 |
| о том что для выражений L"XXX" работает я понял, непонял как OlePropertySet("Value",DBGrid1->Fields[j-1]->AsString.c_str()); fopen(SaveDialog1->FileName.c_str(),"w"); сделать чаром |
| Автор: mrbrooks 2.3.2009, 14:17 |
вместо с_str() использовать w_str() |
| Автор: rthsobakas 2.3.2009, 22:35 | ||||||
myk,
ага... меня тоже это напрягает. У меня проблем. код
нажимаю Ф9. [BCC32 Error] PTestDll.cpp(19): E2034 Cannot convert 'wchar_t *' to 'char *' [BCC32 Error] PTestDll.cpp(19): E2342 Type mismatch in parameter 's' (wanted 'char *', got 'wchar_t *') Ф-ия Code_Dec выглядит так
И что такое L??? все пишут перед строкой |
| Автор: Alexeis 2.3.2009, 23:44 |
| плюс ко всем fopen заменяется на _wfopen Признак строки в юникоде. От слова Long я думаю. |
| Автор: myk 3.3.2009, 04:28 | ||||
OlePropertySet("Value",DBGrid1->Fields[j-1]->AsString.с_str()); открывается асм отладчик (не пашет в 2009 билдере в пред версиях c_str() был char) OlePropertySet("Value",DBGrid1->Fields[j-1]->AsString); оле выдает сообщение о неверном типе переменной из за этой строки
пробовал(= out=_wfopen(SaveDialog1->FileName.w_str(),"w"); [BCC32 Error] Unit1.cpp(127): E2034 Cannot convert 'const char *' to 'const wchar_t *' [BCC32 Error] Unit1.cpp(127): E2342 Type mismatch in parameter '__mode' (wanted 'const wchar_t *', got 'const char *') |
| Автор: mrbrooks 3.3.2009, 08:48 |
во-первых метод, а не свойство. во-вторых - точно возвращают одинаковый тип. разбираться. |
| Автор: myk 3.3.2009, 09:58 |
| никто на билдере не пишет чтоли?(= как мне в ексель записывать wchar_t ? другим методом или всетаки есть какие то функции преобразования |
| Автор: Alexeis 3.3.2009, 10:20 | ||
Опять жеж про L забыл
|
| Автор: rthsobakas 3.3.2009, 12:56 | ||||||||||||||
блин... во всем китайцы виноваты. Alexeis, дык ниче у него не переконвертируется w_str() и с_str() в wchar_t переводят. http://www.sql.ru/forum/actualthread.aspx?tid=577447
http://www.programmersforum.ru/showthread.php?t=25474
Если честно , то я плохо понял как конвертировать. если кто понял, то как относительно моего примера будет?
Добавлено через 6 минут и 3 секунды CP_ACP The current system Windows ANSI code page. This value can be different on different computers, even on the same network. It can be changed on the same computer, leading to stored data becoming irrecoverably corrupted. This value is only intended for temporary use and permanent storage should be done using UTF-16 or UTF-8 if possible. Перевод сократа
|
| Автор: rthsobakas 3.3.2009, 13:12 |
| http://msdn.microsoft.com/en-us/library/bb202786.aspx int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar ); |
| Автор: rthsobakas 3.3.2009, 13:32 | ||
| [ILINK32 Error] Fatal: Unable to open file '相Ⴜ"Ⴔ"農相ꊊ相ꀁ盞勑ƊĄ.OBJ' Возникает если
|
| Автор: myk 4.3.2009, 05:10 |
| я попробовал это исполнять сперва тоже чето не открывалось но потом пересоздал проект и все сделал внимательно((= а по поводу чаров надо помоеум другую среду юзать, builder 2007 не имеет таких галов ну и по приятнее чем builder 6 . |
| Автор: myk 12.3.2009, 04:48 | ||
вот так работает(= неужели никто не знал про этот метод?? |
| Автор: mrbrooks 12.3.2009, 09:17 |
такой подход ошибочный. это прокатит только в Бормане. для работы с массивами символов предусмотрены функции копирования. |
| Автор: myk 12.3.2009, 12:32 |
| это чисто пример, как приводить к чару из юникода. мне надо было через оле в ексель передавать чар строки, другие он не принимал ругаясь ошибками, .c_str() не помогал а .t_str() делает. |
| Автор: ZAK 18.3.2009, 10:42 |
| Вынужден был давеча портировать проект с VC++ 6.0 на VC++ 2005 и пользуясь инструкцией, написанной менеджером проекта, для конвертирования в/из Unicode широко использовал макросы ATL. Для констант - _T(""), для переменных CA2T(), CT2A(), CW2T() и т.п. http://msdn.microsoft.com/ru-ru/library/87zae4a3.aspx http://msdn.microsoft.com/ru-ru/library/805c56f8.aspx |
| Автор: batraq 14.4.2009, 18:18 |
| А может кто знает в std::wstring и вообще в STL есть готовые функции чтобы гонять строки из верхнего регистра в нижний и наоборот? |