Попробуйте использовать std::vector<char>
вместо std::string
. Это правильный контейнер, когда вы хотите "непрерывную последовательность байтов".
С исходным контейнером std::vector
код довольно прост, если вы действительно хотите просто переосмыслить данные (т. Е. Вы просто хотите обработать байты, как если бы они были последовательностью wchar_t
):
std::vector<char> v = get_my_wstring_character_data();
if (v.size() % sizeof (wchar_t) != 0)
throw std::runtime_error("Invalid wstring length");
std::wstring ws(reinterpret_cast<wchar_t*>(&v[0]),
reinterpret_cast<wchar_t*>(&v[0] + v.size()));
Если ваш источник std::string
, этот же подход будет работать, если вы можете гарантировать, что реализация std::string
, которую вы используете, хранит его символы непрерывно. На практике это всегда так.