C++ 如何将CString转换为字节?

C++ 如何将CString转换为字节?,c++,string,mfc,type-conversion,byte,C++,String,Mfc,Type Conversion,Byte,我的程序中有包含如下字节信息的cstring: L"0x45" 我想将其转换为值为0x45的字节类型。我该怎么做?我能找到的所有示例都试图获取字符串本身的文本字节值,但我想获取CString中包含的值并将其转换为字节。如何实现这一点?您可以使用转换函数,指定基数16 e、 g: 输出: 作为一种选择,您也可以考虑使用新的C++ 11: #定义UNICODE #定义UNICODE #包含//用于控制台输出 #包含//用于std::stoi() #包括//用于CString int main()

我的程序中有包含如下字节信息的cstring:

L"0x45"
我想将其转换为值为
0x45
的字节类型。我该怎么做?我能找到的所有示例都试图获取字符串本身的文本字节值,但我想获取CString中包含的值并将其转换为字节。如何实现这一点?

您可以使用转换函数,指定基数16

e、 g:

输出:


作为一种选择,您也可以考虑使用新的C++ 11:

#定义UNICODE
#定义UNICODE
#包含//用于控制台输出
#包含//用于std::stoi()
#包括//用于CString
int main()
{
CString str=L“0x45”;
static const int kBase=16;//使用基数16(十六进制)进行转换
intn=std::stoi(str.GetString(),nullptr,kBase);
字节b=静态_转换(n);

std::cout
std::stoi
和相关函数的存在是有原因的。即使是stringstreams的旧方法也仍然支持十六进制。我尝试了stoi和_wtoi,它们都返回了0而不是0x45。请仔细查看该函数:
#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
#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;
}