2014-11-08 3 views
0

Учитывая ZeroMQ сообщение, полученное таким образом:Получить ZeroMQ данные сообщения в станд :: вектор <char>

zmq_msg_t messageIn; 
int rc = zmq_msg_init(&messageIn); 
rc = zmq_msg_recv(&messageIn, socket, 0); 

Я хотел бы получить доступ к входящие данные сообщения и хранить его в;

std::vector<char> inMsg; 

Попытка этого;

std::memcpy(&inMsg, zmq_msg_data(&messageIn), zmq_msg_size(&messageIn)); 

Не работает. Может ли кто-нибудь предложить предложения о том, как достичь этого?

+0

'memcpy' используя inMsg адрес, очевидно, не делать то, что вы хотите, потому что это не указывает на хранение. Рави ответил на ваш вопрос. используя полученный msg_str, вы можете перебирать символы, используя 'msg_str.begin()' и 'end()'. Если вы не хотите использовать 'std :: string', вы можете просто использовать массив. 'char * inMsg = new char [zmq_msg_size (& messageIn);' then 'memcpy' в этот массив, как вы это делали. –

ответ

1

Причина это не работает, потому что вы, кажется, не быть изменения размера vector в качестве данных, которые вы пытаетесь скопировать в него. Он также не работает, потому что вы передаете адрес объекта vector на memcpy вместо адреса данных, хранящихся в памяти vector. Объект vector обычно содержит только два указателя на начало и конец хранилища, которым он управляет. То, что вы хотите получить, является указателем на это хранилище, которое вы можете получить либо с помощью &inMsg[0], либо в C++ 11 inMsg.data().

Так попробуйте:

std::vector<char> inMsg(zmq_msg_size(&messageIn)); 
std::memcpy(inMsg.data(), zmq_msg_data(&messageIn), zmq_msg_size(&messageIn)); 
+0

Это исправило проблему. Большое спасибо. – GoFaster

2

Вы можете сделать что-то вроде ниже.

zmq::message_t request; 

socket.recv (&request); 

std::string msg_str(static_cast<char*>(request.data()), request.size()); 

а затем хранить строки в векторе. Было бы гораздо проще для обработки ...

std::vector<std::string> strVec; 
strVec.push_back(msg_str); 
+0

Да, получение сообщения может быть выполнено с помощью std :: string, но это не то, о чем я просил. – GoFaster

+2

Я ответил на ваш вопрос ... – ravi

Смежные вопросы