在C++中将一串字节拆分为BYTES的向量

use*_*644 5 c++ string byte split delimiter

我有一个字节字符串,如下所示:

"1,3,8,b,e,ff,10"
Run Code Online (Sandbox Code Playgroud)

如何将此字符串拆分为包含以下值的BYTE的std :: vector:

[0x01,0x03,0x08,0x0b,0x0e,0xff,0x10]

我正在尝试使用','作为分隔符来拆分字符串,但是我在使用它时遇到了一些麻烦.有人可以帮助我解决这个问题吗?

所以我试过这个:

    std::istringstream iss("1 3 8 b e ff 10");
    BYTE num = 0;
    while(iss >> num || !iss.eof()) 
    {
        if(iss.fail()) 
        {
            iss.clear();
            std::string dummy;
            iss >> dummy;
            continue;
        }
        dataValues.push_back(num);
    }
Run Code Online (Sandbox Code Playgroud)

但是这会将ascii字节值推送到向量中:

49 //1
51 //3
56 //8
98 //b
101 //e
102 //f
102 //f
49 //1
48 //0
Run Code Online (Sandbox Code Playgroud)

我试图填充向量:

 0x01
 0x03
 0x08
 0x0b
 0x0e
 0xff
 0x10
Run Code Online (Sandbox Code Playgroud)

πάν*_*ῥεῖ 1

您只是错过了根据我的评论中的链接答案来调整用例中出现的一些小问题:

    std::istringstream iss("1,3,8,b,e,ff,10");
    std::vector<BYTE> dataValues;

    unsigned int num = 0; // read an unsigned int in 1st place
                          // BYTE is just a typedef for unsigned char
    while(iss >> std::hex >> num || !iss.eof()) {
        if(iss.fail()) {
            iss.clear();
            char dummy;
            iss >> dummy; // use char as dummy if no whitespaces 
                          // may occur as delimiters
            continue;
        }
        if(num <= 0xff) {
            dataValues.push_back(static_cast<BYTE>(num));
        }
        else {
            // Error single byte value expected
        }
    }
Run Code Online (Sandbox Code Playgroud)

您可以在 ideone 上查看完整的工作示例。