2013-11-29 3 views
0

У меня есть вектор строки и самопровозглашенной тип неподписанного символа:C++: как преобразовать элементы векторных строк в 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.

Как я могу справиться с этим?

Update:

Во-первых, спасибо всем за ваши драгоценные комментарии и ответы. В моем коде, мой result имеет шесть элементов, как эти ценности:

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

я попытался как ответ Raxvan, но в конце концов, data захватывает только первое значение этих строк элементов, то есть, все нули. То, что я на самом деле хочу сделать, это позволить data имеют то же значение, как result, но BYTE типа, так что он похож на присвоение значения, как это:

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

невозможно в общем случае - потому что у вас есть неизвестное количество неизвестных строк длины, и попытаться положить все это в фиксированной длины 11 байт массива – DarkWanderer

+1

It не имеет смысла преобразовать строку (произвольное количество символов) в один байт.Что вы на самом деле хотите в массиве 'data'? –

+2

'std :: vector result;' эффективно представляет собой * двухмерный массив символов, чтобы получить индивидуальный символ, вы должны написать 'result [i] [j]'. Но «данные» * одномерные *, вот в чем проблема. Поэтому, вероятно, решение либо делает «результат» одномерным, либо делает «данные» двумерными. Не могу с этим поделать, потому что у меня больше нет картины. – john

ответ

3

Вы вводите в заблуждение свои типы.

data представляет собой массив BYTE (так в основном в состоянии держать 11 символов), но result является массивом string (то есть он может содержать нескольких струны, каждый из тех, владеющих нескольких персонажей).

Поэтому в зависимости от того, что вы на самом деле нужно, чтобы вы можете сделать две вещи:

Если вам нужны все строки должны быть преобразованы в байтовые массивы, а затем создать массив массивов 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.

+0

Я обновил свой вопрос. –

3

string инкапсулирует массив 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

Давным-давно я написал код 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); 
     } 
Смежные вопросы