这是一个函数。
inline void Str2Data(std::vector<unsigned char> &To, const CString &From)
{
To.resize(From.GetLength() * sizeof(TCHAR) );
if (!From.IsEmpty())
memcpy(&To[0], From.GetString(), To.size());
}
它可以转换正常,但如果 From = "123", To = { '1
', '0', '2', '0', '3'}。为什么会这样?
平台上的TCHAR
很可能是wchar_t
,两个字节也是如此,所以CString
实际上是一个宽字符的容器。你想要的是进行转换而不是按字节复制:
inline void Str2Data(std::vector<unsigned char> &To, const CString &From)
{
if (!From.IsEmpty()) {
To.resize(From.GetLength());
std::transform(From.GetString(),
From.GetString() + From.GetLength(),
To.begin(),
[](TCHAR c) { return static_cast<unsigned char>(c); });
}
else {
To.clear();
}
}