conversion of Cstring to BYTE

后端 未结 5 1944
被撕碎了的回忆
被撕碎了的回忆 2021-01-14 06:08

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.

5条回答
  •  不知归路
    2021-01-14 06:49

    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 buffer(size_in_bytes);
    unsigned char const* first = static_cast(data.GetString());
    unsigned char const* last = first + size_in_bytes;
    std::copy(first, last, buffer.begin());
    

    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(lpBuffer));
    if (rcvValue.Compare(_T("ABC")) == 0)
    {
        ////
    }
    

    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.

提交回复
热议问题