Cstring 到 BYTE 的转换
我正在使用 Visual Studio c++ 并希望将 Cstring 转换为 Byte.我已经编写了这段代码,但它在第二行给了我数据"未定义的错误.
I am using Visual Studio c++ and want to convert the Cstring to Byte. I have written this code but it gave me error in the second line that "data" is undefined.
CString data = _T( "OK");
LPBYTE pByte = new BYTE[data.GetLength() + 1];
memcpy(pByte, (VOID*)LPCTSTR(data), data.GetLength());
我还需要将 LPBYTE 转换为 const char 以用于 strcmp 函数.我已经编写了代码,但我找不到它的问题.
Further more I need to convert LPBYTE to const char for strcmp function. I have written the code but I can't find the issue with it.
const LPBYTE lpBuffer;
LPBYTE lpData = lpBuffer;
CString rcvValue(LPCSTR(lpBuffer));
const CHAR* cstr = (LPCSTR)rcvValue;
if (strcmp (cstr,("ABC")) == 0)
{
////
}
推荐答案
CString
类型是 CStringT,取决于它使用的字符集(CStringA
for ANSI, CStringW
用于 Unicode).虽然使用 _T 宏,您在将受控序列复制到缓冲区时未能考虑不同的大小要求.
The CString
type is a template specialization of CStringT, depending on the character set it uses (CStringA
for ANSI, CStringW
for Unicode). While you ensure to use a matching encoding when constructing from a string literal by using the _T macro, you fail to account for the different size requirements when copying the controlled sequence to the buffer.
以下代码修复了第一部分:
The following code fixes the first part:
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 成员,可以使用:
The second question is really asking to solve a solved problem. The CStringT
type already provides a CStringT::Compare member, that can be used:
const LPBYTE lpBuffer;
CString rcvValue(static_cast<char const*>(lpBuffer));
if (rcvValue.Compare(_T("ABC")) == 0)
{
////
}
一般建议:始终喜欢使用与您的字符编码匹配的具体 CStringT
特化,即 CStringA
或 CStringW
.代码将更易于阅读和推理,当您遇到需要帮助的问题时,您可以在 Stack Overflow 上发布问题,而无需解释您使用的编译器设置.
General advice: Always prefer using the concrete CStringT
specialization matching your character encoding, i.e. CStringA
or CStringW
. The code will be much easier to read and reason about, and when you run into problems you need help with, you can post a question at Stack Overflow, without having to explain, what compiler settings you are using.
相关文章