如何将CString转换为BYTE?

时间:2014-07-22 15:20:31

标签: c++ string mfc type-conversion byte

我的程序中有CStrings包含BYTE信息,如下所示:

L"0x45"

我想将其转换为值为0x45的BYTE类型。我该怎么做呢?我可以找到的所有示例都试图获取字符串本身的字面值,但我想获取CString中包含的值并将THAT转换为BYTE。我如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以使用wcstoul()转换功能,指定基数为16。

e.g:

#define UNICODE
#define _UNICODE
#include <stdlib.h> // for wcstoul()
#include <iostream> // for console output
#include <atlstr.h> // for CString

int main() 
{
    CString str = L"0x45";

    static const int kBase = 16;    // Convert using base 16 (hex)
    unsigned long ul = wcstoul(str, nullptr, kBase);
    BYTE b = static_cast<BYTE>(ul);

    std::cout << static_cast<unsigned long>(b) << std::endl;
}
C:\Temp>cl /EHsc /W4 /nologo test.cpp

输出:

69

作为替代方案,您还可以考虑使用新的C ++ 11 std::stoi()

#define UNICODE
#define _UNICODE
#include <iostream> // for console output
#include <string>   // for std::stoi()
#include <atlstr.h> // for CString

int main() 
{
    CString str = L"0x45";

    static const int kBase = 16;    // Convert using base 16 (hex)
    int n = std::stoi(str.GetString(), nullptr, kBase);
    BYTE b = static_cast<BYTE>(n);

    std::cout << static_cast<unsigned long>(b) << std::endl;
}

注意
在这种情况下,由于std::stoi()需要const std::wstring&参数,因此您必须显式获取const wchar_t*实例的CString指针,使用{{ 1}}和我一样(我更喜欢),或使用CString::GetString() 然后,将构建一个临时static_cast<const wchar_t*>(str)以传递给std::wstring进行转换。