[英]How to convert wstring into byte vector
嗨,我有一些typedef:
typedef unsigned char Byte;
typedef std::vector<Byte> ByteVector;
typedef std::wstring String;
我需要将String
转换为ByteVector
,我已经试过了:
String str = L"123";
ByteVector vect(str.begin(), str.end());
结果vectror
包含3个元素:1、2、3。但是它是wstring
所以此字符串中的每个字符都很宽,所以我的预期结果将是: vectror
。
有什么标准的方法可以做到这一点,或者我需要编写一些自定义函数。
Byte const* p = reinterpret_cast<Byte const*>(&str[0]);
std::size_t size = str.size() * sizeof(str.front());
ByteVector vect(p, p+size);
您的实际目标是什么? 如果您只想获取表示wchar_t
对象的字节,那么相当简单的转换就可以解决问题,尽管我不仅会使用强制转换为unsigned char const*
,而是使用显式转换。
另一方面,如果您实际上想将std::wstring
转换为使用UTF8或UTF16编码的序列(通常在处理字符时会如此),则用于编码的转换会变得更加复杂。 转换为编码的最简单方法可能是使用C的wcstombs()
:
std::vector<char> target(source.size() * 4);
size_t n = wcstombs(&target[0], &source[0], target.size());
上述片段假定source
不是空的,并且最后wchar_t
在source
被wchar_t()
转换使用C的全局语言环境,并假定要转换在那里设置的任何字符编码。 还有一个wcstombs_l()
版本,您可以在其中指定语言环境。
C ++具有类似的功能,但在std::codecvt<...>
方面却很难使用。 如有必要,我可以提供一个示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.