字节串到字节数组c++

String of Bytes to Byte array c++

我正在尝试制作采用此模式字符串的函数:

"07 C5 8F E1 FD CA 8C E2 D4 FD BC E5 03 C6 8F E2"

到return这个BYTE数组

BYTE pattern[] = { 0x07, 0xC5, 0x8F, 0xE1, 0xFD, 0xCA, 0x8C, 0xE2, 0xD4, 0xFD, 0xBC, 0xE5, 0x03,  0xC6, 0x8F, 0xE2};

我尝试了什么:

BYTE strPatternToByte(std::string pattern, int len)
{
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream(pattern);
    while(std::getline(tokenStream, token, ' '))
    {
        tokens.push_back(token);
    }
    BYTE somePtr[len];
    for ( int i=0 ; i < len ; i++)
    {
        somePtr[i] = '0x' +  tokens[i];
    }

    return somePtr;
}

但是转换为字节模式的行对我不起作用,

somePtr[i] = (byte) tokens[i];

在 C++ 中有没有一种方法可以自动将它们解析为字节或类似 java 的东西?

问题是 (byte) tokens[i] 不会将字符串转换为另一种类型,而是要求编译器将 tokens[i] 中的 std::string 对象视为 byte,它不是也不能转换成。这基本上是你在向编译器撒谎。事实上,基本上所有 C-type 投射都应该是一个红旗,表明你做错了什么。

一个解决方案是使用普通的流提取运算符 >> 将每个 space-delimited 十六进制序列解析为无符号整数:

std::vector<unsigned> values;
std::istringstream stream(pattern);

unsigned value;
while (stream >> std::hex >> value)
{
    values.push_back(value);
}