C++ 将字符串转换为无符号字符数组/字节数组

C++ 将字符串转换为无符号字符数组/字节数组,c++,arrays,C++,Arrays,如何转换以下字符串: std::string str = "x89x30x50"; 对于以下带有转义序列的无符号字符数组/字节数组: unsigned char char_arr[1024] = "\x89\x30\x50"; 如果我正确理解了您的问题,您希望将十六进制值字符串(前缀为“x”)拆分为字节值 您可以通过标记字符串(使用分隔符“x”)并将每个标记转换为字节值来实现这一点: 大概是这样的: #include <string> #include <sstream&g

如何转换以下字符串:

std::string str = "x89x30x50";
对于以下带有转义序列的无符号字符数组/字节数组:

unsigned char char_arr[1024] = "\x89\x30\x50";

如果我正确理解了您的问题,您希望将十六进制值字符串(前缀为“x”)拆分为字节值

您可以通过标记字符串(使用分隔符“x”)并将每个标记转换为字节值来实现这一点:

大概是这样的:

#include <string>
#include <sstream>

int main()
{
    std::string str = "x89x30x50";
    unsigned char char_arr[1024] = "";
    std::istringstream iss(str);
    std::string token;
    int i = 0;
    while (std::getline(iss, token, 'x'))
    {
        if (token.empty()) continue;
        char_arr[i++] = static_cast<unsigned char>(std::stoi(token, nullptr, 16));
    }
    //char_arr = {0x89,0x30,0x50,0,0,...}
}
#包括
#包括
int main()
{
std::string str=“x89x30x50”;
无符号字符[1024]=“”;
标准:istringstream iss(str);
字符串标记;
int i=0;
while(std::getline(iss,token,'x'))
{
如果(token.empty())继续;
char_arr[i++]=static_cast(std::stoi(token,nullptr,16));
}
//char_arr={0x89,0x30,0x50,0,0,…}
}

您想做什么?字符串
\xas\xdf\xtg
不是
xasxdfxtg
的字节表示形式。这些是无效的转义序列。它们的形式必须是
\x\uuuuu
,其中
\uuuuu
是一些(两位数)的十六进制值。我编辑它来表示十六进制值