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

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

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

C++ Конвертировать float в *char???
C++ char to int не могу не как конвертировать
C++ Как int конвертировать в string или char?
C++ Cannot convert 'UnicodeString' to 'const char *'
C++ UnicodeString to Array of char c++ builder
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,640
Записей в блоге: 1
16.09.2016, 11:00     конвертировать UnicodeString в char* #2
И где тут конвертация?
Selot
155 / 91 / 23
Регистрация: 19.01.2010
Сообщений: 364
Завершенные тесты: 1
16.09.2016, 11:16     конвертировать UnicodeString в char* #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* 
...
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
17.09.2016, 11:52     конвертировать UnicodeString в char* #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
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,584
Записей в блоге: 17
17.09.2016, 11:59     конвертировать UnicodeString в char* #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
Yandex
Объявления
17.09.2016, 11:59     конвертировать UnicodeString в char*
Ответ Создать тему
Опции темы

Текущее время: 06:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru