如何将std :: vector <char>"强制转换"为std :: vector <wchar_t>

Joh*_*ren 7 c++ stl

我有一个std :: vector of bytes(char),我想把这个向量的"C风格转换"等同于一个类型的向量wchar_t.

显然,我真正需要做的是复制数据,但这里的事情是我已经在左侧有一个UTF-16字节流,我只想把它移到wchar_t矢量上,以便我可以使用它.理想情况下,我只想交换缓冲区,但我不确定如何以安全的方式执行此操作...

C++实现安全转换复制操作的有效方法是什么?

注意:

我做我的存储UTF-16的字符串作为std::wstringstd::vector<wchar_t>,但我有我碰巧知道该内存缓冲区是UTF-16,我需要复制它,不知何故?

jal*_*alf 9

最有效(也是最安全)的方法就是不这样做.让你vector<char>自己的数据缓冲区,并简单地创建一对wchar_t指针,用作指向向量的迭代器.

std::vector<char> vec;
wchar_t* first = reinterpret_cast<wchar_t*>(&vec[0]);
wchar_t* last = reinterpret_cast<wchar_t*>(&vec[0] + vec.size());
Run Code Online (Sandbox Code Playgroud)

现在你有一个迭代器对,它可以与所有标准库算法一起使用.而且您不必复制单个字节.:)

(免责声明:我假设矢量的大小可被整除sizeof(wchar_t).否则你将不得不调整last指针)