Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
qppq
11 / 11 / 2
Регистрация: 31.08.2016
Сообщений: 163
Завершенные тесты: 1
#1

конвертировать UnicodeString в char* - C++

16.09.2016, 10:49. Просмотров 203. Ответов 4
Метки нет (Все метки)

получилось вот так
C++
1
char* aa = (char*)(Edit1->Text).c_str();
какие есть еще варианты? спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2016, 10:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос конвертировать UnicodeString в char* (C++):

UnicodeString to Array of char c++ builder - C++
Подскажите пожалуйста, каким образом можно посимвольно записать AnsiString в Array char. Можно так же вариант и из файла. Если не...

Cannot convert 'UnicodeString' to 'const char *' - C++
делаю локальную сеть, столкнулся с проблемой: addr.sin_addr.s_addr=inet_addr("192.168.0.3"); как сделать чтобы ip мог задать...

Cannot convert 'UnicodeString' to 'const char *' - C++
При написании программы столкнулся с проблемой. На этих строчках: char sFInName=STR_FILE_IN_NAME, sFOutName=STR_FILE_OUT_NAME,...

C++ конвертировать char* в time_t - C++
Всем привет. Помогите, пожалуйста разобраться, как нормально конвертировать char* (время полученное с сервера) в time_t. Нашел вариант для...

Конвертировать float в *char??? - C++
Как преобразовать float в *char?

Конвертировать массив char в UrlEncode - C++
Помогите конвертировать массив char в UrlEncode. Начал учить c++ не давно, и вот сразу получил такое задание. Функцию конвертирования не...

4
zer0mail
2354 / 1984 / 198
Регистрация: 03.07.2012
Сообщений: 7,117
Записей в блоге: 1
16.09.2016, 11:00 #2
И где тут конвертация?
0
Selot
172 / 108 / 28
Регистрация: 19.01.2010
Сообщений: 431
Завершенные тесты: 2
16.09.2016, 11:16 #3
C++
1
2
3
4
5
6
#inсlude<string>
...
std::wstring w_str(Edit1->Text.c_str()); // c_str() возвращает wchar*
std::string str(w_str.begin(), w_Str.end());
const char* ch = str.c_str();  // c_str() возвращает const char* 
...
1
hoggy
6672 / 2858 / 491
Регистрация: 15.11.2014
Сообщений: 6,379
Завершенные тесты: 1
17.09.2016, 11:52 #4
Цитата Сообщение от Selot Посмотреть сообщение
std::string str(w_str.begin(), w_Str.end());
это - плохая идея.

qppq,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
// ============================================================================
// ============================================================================
 
    /* преобразования строк в разные кодировки */
 
#ifndef _STRING_
    #error #include <string> first
#endif
 
// --- conv.h
namespace conv{
 
    namespace multibyte {
        std::string  convert(const wchar_t* s);
        std::wstring convert(const char*    s);
        std::string  convert(const std::wstring& s);
        std::wstring convert(const std::string&  s);
    }// namespace multibyte 
 
    namespace utf8 {
        std::string  convert(const std::wstring& s);
        std::wstring convert(const std::string&  s);
    }// namespace utf8 
 
    namespace stdlocal {
 
        std::string convert(
            const wchar_t* s,
            const size_t len,
            const std::locale& loc = std::locale(),
            const char default_char = '?'
        );
 
        std::string convert(
            const wchar_t* s, 
            const std::locale& loc = std::locale(""), 
            const char default_char = '?'
        );
        std::string convert(
            const std::wstring& s, 
            const std::locale& loc = std::locale(""), 
            const char default_char = '?'
        );
 
        std::wstring convert(
            const char* s,
            const std::locale& loc = std::locale("")
        );
        std::wstring convert(
            const std::string& s, 
            const std::locale& loc = std::locale("") 
        );
 
        std::wstring convert(
            const char* s, 
            const size_t len, 
            const std::locale& loc = std::locale()
        );
 
    } //namespace stdlocal 
 
}//namespace conv
 
 
// --- conv.cpp
 
#ifndef _STRING_
    #error #include <string> first
#endif
 
#ifndef _LOCALE_
    #error #include <locale> first
#endif
 
#ifndef _CODECVT_
    #error #include <codecvt> first
#endif
 
namespace conv{
 
    namespace multibyte {
 
        std::string convert(const std::wstring& s)
            { return convert( s.c_str() ); }
        std::wstring convert(const std::string& s)
            { return convert(s.c_str()); }
 
        std::string convert(const wchar_t* s)
        { 
            const size_t len = wcslen(s);
            std::string result(len,'\0');
 
            #ifdef _MSC_VER
                size_t count = 0;
                const auto size_ = result.size();
                wcstombs_s(&count, &result[0], size_, s, size_ );
            #else
                std::mbstate_t state = std::mbstate_t();
                std::wcsrtombs( &result[0], &s, result.size(), &state);
            #endif
 
            return result;
        }
 
        std::wstring convert(const char* s)
        { 
            std::mbstate_t state = std::mbstate_t(); 
        
            size_t len;
            wchar_t wc[4] = {};
            std::wstring result;
            const char* end = s + std::strlen(s);
            while ((len = std::mbrtowc(wc, s, end - s, &state)) > 0)
            {
                result += wc; s += len;
                for (auto& ch: wc)  ch = L'\0';
            }
            return result;
        }
 
    }//namespace multibyte
 
    namespace utf8 {
        
        std::string  convert(const std::wstring& s)
        { 
            typedef std::codecvt_utf8<wchar_t>
                convert_typeX;
            std::wstring_convert<convert_typeX,wchar_t>
                converterX;
            return converterX.to_bytes(s);
        }
        std::wstring convert(const std::string&  s)
        { 
            typedef std::codecvt_utf8<wchar_t>
                convert_typeX;
            std::wstring_convert<convert_typeX,wchar_t>
                converterX;
            return converterX.from_bytes(s);
        }
            
    }//namespace utf8 
 
    namespace stdlocal {
 
        std::wstring convert(const char* first, const size_t len, const std::locale& loc)
        {
            if(len == 0)
                return std::wstring();
            const std::ctype<wchar_t>& facet =
                std::use_facet< std::ctype<wchar_t> >(loc);
            const char* last = first + len;
            std::wstring result(len, L'\0');
            facet.widen(first, last, &result[0]);
            return result;
        }
 
        std::string convert(
            const wchar_t* first,
            const size_t len,
            const std::locale& loc,
            const char default_char
        )
        {
            if(len == 0)
                return std::string();
            const std::ctype<wchar_t>& facet =
                std::use_facet<std::ctype<wchar_t> >(loc);
            const wchar_t* last  = first + len;
            std::string result( len, default_char );
            facet.narrow( first, last, default_char, &result[0] );
            return result;
        }
 
        std::string  convert( const wchar_t* s, const std::locale& loc, const char default_char )
            { return convert(s, std::wcslen(s), loc, default_char); }
        std::string  convert(const std::wstring& s, const std::locale& loc, const char default_char)
            { return convert(s.c_str(), s.length(), loc, default_char);  }
        std::wstring convert( const char* s, const std::locale& loc)
            { return convert(s, std::strlen(s), loc); }
        std::wstring convert( const std::string& s, const std::locale& loc)
            { return convert(s.c_str(), s.length(), loc); }
 
    }//namespace stdlocal
}//namespace conv
1
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
17.09.2016, 11:59 #5
Цитата Сообщение от qppq Посмотреть сообщение
C++
1
char* aa = (char*)(Edit1->Text).c_str();
Делать так нельзя.

Цитата Сообщение от qppq Посмотреть сообщение
какие есть еще варианты? спасибо
Есть вариант, подумать головой, и задаться вопросом зачем оно нужно вообще?

Можно так
C++
1
2
AnsiString  a = Edit1->Text;
// Использовать   a.c_str()
Но о пять же от контекста.


P.S.: Вообще тема должна быть в разделе C++Builder
0
17.09.2016, 11:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2016, 11:59
Привет! Вот еще темы с ответами:

char to int не могу не как конвертировать - C++
читаю из файла в массив char'ов соответственно есь массив из четырех элементов в каторых записан один int, вот как это кампу объяснить ...

Как int конвертировать в string или char? - C++
например как сделать это: int x=5; string y=&quot;Hello&quot;+x;

Cannot convert 'UnicodeString' to 'String' - C++
Подскажите как конвертировать такие форматы, компилятор если что RAT Studio 2010 нашел тут вариант...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...


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

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

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