我正在使用 Visual Studio c++ 并希望将 Cstring 转换为 Byte。我已经编写了这段代码,但它在第二行中给出了“数据”未定义的错误。
CString data = _T( "OK");
LPBYTE pByte = new BYTE[data.GetLength() + 1];
memcpy(pByte, (VOID*)LPCTSTR(data), data.GetLength());
此外,我需要将 LPBYTE 转换为 const char 以用于 strcmp 函数。我已经编写了代码,但找不到问题所在。
const LPBYTE lpBuffer;
LPBYTE lpData = lpBuffer;
CString rcvValue(LPCSTR(lpBuffer));
const CHAR* cstr = (LPCSTR)rcvValue;
if (strcmp (cstr,("ABC")) == 0)
{
////
}
最佳答案
CString
类型是 CStringT 的模板特化。 ,取决于它使用的字符集(CStringA
用于 ANSI,CStringW
用于 Unicode)。虽然您确保在使用 _T macro 从字符串文字构造时使用匹配的编码,在将受控序列复制到缓冲区时,您没有考虑到不同的大小要求。
以下代码修复了第一部分:
CString data = _T("OK");
size_t size_in_bytes = (data.GetLength() + 1) * sizeof(data::XCHAR);
std::vector<BYTE> buffer(size_in_bytes);
unsigned char const* first = static_cast<unsigned char*>(data.GetString());
unsigned char const* last = first + size_in_bytes;
std::copy(first, last, buffer.begin());
第二个问题实际上是要求解决一个已解决的问题。 CStringT
类型已经提供了一个 CStringT::Compare成员,可以使用:
const LPBYTE lpBuffer;
CString rcvValue(static_cast<char const*>(lpBuffer));
if (rcvValue.Compare(_T("ABC")) == 0)
{
////
}
一般建议:始终喜欢使用与您的字符编码匹配的具体 CStringT
特化,即 CStringA
或 CStringW
。代码将更易于阅读和推理,当您遇到需要帮助的问题时,您可以在 Stack Overflow 上发帖提问,而无需解释您正在使用的编译器设置。
关于c++ - Cstring 到 BYTE 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356815/