繁体   English   中英

如何将wstring转换为字节向量

[英]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_tsourcewchar_t() 转换使用C的全局语言环境,并假定要转换在那里设置的任何字符编码。 还有一个wcstombs_l()版本,您可以在其中指定语言环境。

C ++具有类似的功能,但在std::codecvt<...>方面却很难使用。 如有必要,我可以提供一个示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM