c++ - Cstring 到 BYTE 的转换

标签 c++ visual-studio-2010 mfc

我正在使用 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 特化,即 CStringACStringW。代码将更易于阅读和推理,当您遇到需要帮助的问题时,您可以在 Stack Overflow 上发帖提问,而无需解释您正在使用的编译器设置。

关于c++ - Cstring 到 BYTE 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356815/

相关文章:

c++ - 如何使用 Polygon_mesh_slicer 的输出来控制 Surface_mesh_deformation CGAL 中的点?

c# - 一个项目里面有两个表单,每个表单建两个独立的exe文件

c++ - 在调试器中的函数评估期间中断

c++ - 在 MFC 单文档中传递参数

c++ - 在 Qt 中混合两个不同的图像

c++ - 如何正确使用remove_if?

java - opencv - 匹配模板

visual-studio-2010 - Visual Studio 单击“查找结果”在错误的窗口中打开代码

c++ - 显示来自浏览按钮的图像

c++ - 使用 CStdioFile 写入字符串