我有一个字符串向量和一个自我声明的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
答案 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个字符),
但是result
是string
的数组(意思是它可以包含多个字符串,每个字符串包含多个字符)。
因此,根据您的实际需要,您可以做两件事:
如果需要将所有字符串转换为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);
}