Я получил класс под названием CANMessage, и он принимает unsigned _id
, const char *_data
и char _len
и некоторые другие вещи, но я пропущу это:
CANMessage::CANMessage(unsigned _id, const char *_data, char _len...)
Это часть mbedAPI МОЖЕТ, но надеюсь включить только полезную информацию.Если нужно, это здесь: https://os.mbed.com/docs/mbed-os/v5.11/mbed-os-api-doxy/_c_a_n_8h_source.html
Так, например, если я создал экземпляр CANMessage примерно так:
CANMessage message;
can.read(message); //stores a CAN frame in CANMessage
Я могу получить доступ к данным следующим образом:
for (int i=0;i<message.len;i++) {
pc.printf(" %02X",*(message.data+i)); //prints out the data one by one
}
У меня есть вектор с именем sendToPc, который отправляет эти данные в определенном формате.
vector<uint8_t> sendToPc;
Таким образом, первые 4 элемента будут хранить длину, а остальные биты хранят данные.,Но я не могу понять, как скопировать в него данные, потому что не понимаю, как работает std :: copy.Я запутался в том, что здесь считают входным итератором.
std::copy(/*first input op, last input op, output operator/*)
Требуется ли указатель на эти данные?Я чувствую, что первым вводом будет message.data, но в векторе я мог бы просто сделать vect.end (), чтобы получить последний элемент, но как получить последний элемент данных в этом случае?
Я полагаю, что выходной итератор будет sendToPc.begin() + 4
.
Как мне скопировать все данные сообщения экземпляра класса в мой вектор sendToPc, начиная хранилище из sendToPc [4]?
Обратите вниманиеЯ использую C ++ 98.
Редактировать: Будет ли работать вместо этого?До тех пор, пока я сначала сохраню длину ...
for (int i=0;i<message.len;i++) {
CANdata.push_back(*(message.data+i));
}