элементы строки и символа - PullRequest
0 голосов
/ 19 января 2011

У меня есть unsigned char* c, который содержит элемент 0x1c.Как я могу добавить его в std::vector<unsigned char>vect?Я работаю в C ++.

std::vector<unsigned char>vect;  //the vect dimention is dynamic

std::string at="0x1c";
c=(unsigned char*)(at.c_str());
vect[1]=c //error? why?

Ответы [ 3 ]

3 голосов
/ 19 января 2011
//The vect dimension is dynamic ONLY if you call push_back
std::vector <std::string> vect;  

std::string at="0x1c";
vect.push_back(at);

Если вы используете C ++, используйте std :: string. Приведенный выше код скопирует вашу строку "0x1c" в вектор.

Если попытаться сделать

vect[0] = c;

Без предварительного расширения вектора с помощью

vect.resize(1);

Вы получите ошибку сегментации, потому что оператор [] не расширяет вектор динамически. Начальный размер вектора - от 0 до *.

ОБНОВЛЕНИЕ: Согласно комментарию ОП, он хотел бы вот что: скопировать беззнаковый символ * в std :: vector (т.е. скопировать массив C в вектор C ++)

std::string at = "0x1c";
unsigned char * c = (unsigned char*)(at.c_str());
int string_size = at.size();

std::vector <unsigned char> vect;

// Option 1: Resize the vector before hand and then copy
vect.resize(string_size);
std::copy(c, c+string_size, vect.begin());

// Option 2: You can also do assign
vect.assign(c, c+string_size);
0 голосов
/ 19 января 2011

с является unsigned char*. vect является std::vector<unsigned char>, поэтому он содержит значения без знака. Назначение не выполнится, так как operator [] на std::vector<unsigned char> ожидает unsigned char, а не unsigned char *.

0 голосов
/ 19 января 2011

У вас есть шестнадцатеричное представление символа в строке, и вы хотите этот символ?

Самый простой:

unsigned char c;
istringstream str(at);
str >> hex >> c; // force the stream to read in as hex
vect.push_back(c);

(я думаю, что должно работать, не проверял его)


Я просто перечитал ваш вопрос еще раз, эта строка:

У меня есть беззнаковый символ * c, который содержит элемент 0x1c

это означает, что на самом деле ваш неподписанный символ * выглядит так:

unsigned char c[] = {0x1c}; // i.e. contains 1 byte at position 0 with the value 0x1c?

или мое предположение выше ...


, чтобы вывести вектор в cout, используйте простоедля цикла, или если вы чувствуете себя смелым

std::cout << std::ios_base::hex;

std::copy(vect.begin(), vect.end(), std::ostream_iterator<unsigned char>(std::cout, " "));

std::cout << std::endl;

, это напечатает шестнадцатеричные представления каждого из unsigned char значений в векторе, разделенных пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...