Как создать std :: wstring, используя коды символов ascii в C ++? - PullRequest
1 голос
/ 11 августа 2010

Мне нужно создать строку с символами, которые имеют следующие значения ascii: 30, 29, 28, 27, 26, 25.

В VB6 я бы сделал asc (30) + asc (29) + etc ...

Что такое эквивалент C ++?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 11 августа 2010

Это вопрос с подвохом о преобразовании набора символов?:) Поскольку стандарт не гарантирует, что символ ASCII будет представлен его целочисленным значением ASCII в wchar_t (хотя для большинства компиляторов / систем это будет так).Если это имеет значение, явно расширяйте свой символ, используя соответствующий языковой стандарт:

std::wstring s;
std::locale loc("C"); // pick a locale with ASCII encoding

s.push_back(std::use_facet<std::ctype<wchar_t> >(loc).widen(30));
s.push_back(std::use_facet<std::ctype<wchar_t> >(loc).widen(29));
s.push_back(std::use_facet<std::ctype<wchar_t> >(loc).widen(28));

Не заканчивайте завершающим 0, он добавляется, когда вы преобразуете wstring в wchar_t * путем вызова .c_str ()

1 голос
/ 11 августа 2010

Std :: wstring - это не что иное, как std :: vector, замаскированный под строку.

Поэтому вы должны иметь возможность использовать метод push_back, например:

std::wstring s;

s.push_back(65);
s.push_back(0);

std::wcout << s << std::endl;

Не забудьте 0-терминатор!

...