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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать функцию, возвращающую минимальный из трёх передаваемых в неё параметров любого (но одинакового) типа http://www.cyberforum.ru/cpp-beginners/thread1808386.html
Функция, возвращающая минимальный из трех передаваемых в нее параметров любого (но одинакового) типа.
C++ Нюансы синтаксиса: как сравнить каждый элемент массива с переменной в условии оператора if ? Привет всем дорогие друзья с толкнулся с такой проблемой, начал ходить на уроки с++ и приступил к изучению массива сталкнулся с такой проблемой, учитель сказал что код в порядке но массив не работает так как один из if не даёт видить массив пожалуйста помогите исправить ошибку не изменяя код полнустью спасибо. #include <iostream> #include <string> using namespace std; int main() { ... http://www.cyberforum.ru/cpp-beginners/thread1808379.html
C++ Циклически сдвинуть значение целочисленной величины на n позиций
Циклически сдвинуть значение целочисленной величины на n позиций вправо и циклически сдвинуть значение целочисленной величины на n позиций влево. Помогите написать программы
Заменить в целочисленной переменной некоторое количество бит C++
Заменить в целочисленной переменной x n бит, начиная с позиции p, n старшими инвертированными битами целочисленной переменной y. Помогите написать программу
C++ Распаковать беззнаковое целое число в четыре символа http://www.cyberforum.ru/cpp-beginners/thread1808348.html
«Распаковать» беззнаковое целое число в четыре символа. Длина беззнакового целого равна 4. Помогите написать программу
C++ Проверка на какую цифру оканчивается число Задание: сделать проверку, является ли число кратным и при этом не заканчиваться цифрой 3. Проверку на кратность я сделал, это не сложно n % 3 == 0 Но как сделать проверку на какую цифру оканчивается заданное число? Перелопатил гугл, но кроме как проверки такой на Паскаль ничего не нашёл подробнее

Показать сообщение отдельно
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,714
Завершенные тесты: 1
17.09.2016, 11:52     конвертировать UnicodeString в char*
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru