C ++:如何将字符串向量元素转换为unsigned char?

时间:2013-11-29 11:45:14

标签: c++ string char type-conversion

我有一个字符串向量和一个自我声明的unsigned char类型:

std::vector<std::string> result;
typedef unsigned char BYTE;
BYTE data[11];

我已将值分配给结果。现在我想将result的元素复制到data

for ( int i=0; i<11; i++)
{
    data[i] = result[i];
}

但它发出错误,说No suitable conversion function from std::string to BYTE exists

我该如何处理?

更新

首先,谢谢大家的宝贵意见和答案。 在我的代码中,我的result有六个元素,比如这些值:

0x30
0x31
0x32
0x33
0x34
0x35

我尝试了Raxvan的答案,但最后,data只捕获了这些字符串元素的第一个值,即全部为零。我实际想要做的是让data具有与result相同但BYTE类型的值,以便它类似于分配这样的值:

BYTE data[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35 } // this line works correctly

3 个答案:

答案 0 :(得分:3)

string封装了一个char数组,编译器不知道如何将其转换为一个char。如果你想从字符串中取出第一个字符,那么你可以这样做:

for ( int i=0,j = 0; i<11 && j < result.size(); j++)
{
    if(result[j].size() != 0) //safety first.
        data[i++] = result[j][0];
}

答案 1 :(得分:3)

你混淆了你的类型。

data是一个BYTE数组(所以基本上可以容纳11个字符), 但是resultstring的数组(意思是它可以包含多个字符串,每个字符串包含多个字符)。

因此,根据您的实际需要,您可以做两件事:

如果需要将所有字符串转换为BYTE数组,则创建一个BYTE数组数组:

// adapt sizes to your needs
size_t const MaxStrSize = 11; // allows to hold 10 characters (+ 0 delimiter)
size_t const MaxStrCount = 11;
BYTE data[MaxStrCount][MaxStrSize];

for (int j=0; j<MaxStrCount && j<result.size(); ++j)
{
    for ( int i=0; i<MaxStrSize && i<result[i].length(); i++)
    {
        data[j][i] = result[j][i];
    }
}

否则,如果您只想访问向量中包含的其中一个字符串(例如第一个字符串):请参阅Raxvan's answer

答案 2 :(得分:1)

自从我写了一些CPP代码以来,很久以前就出现了语法错误。 我认为OP试图实现的是将2D数组转换为单个逗号分隔的字符串。

以下是我的示例代码:

 char [] DATA = "";

        for ( int j = 0;j < result.count(); j++)
        { 
          if(j < result.count()-2)
          result = strcat(result, ",")
          DATA =       strcat(DATA, result);
        }