Здравствуйте! Я в c++ новичок и у меня возникла проблема, не знаю как прочитать ответ из буфера socket сервера
Мой сайт отправляет данные
int opcode
int key_len
string key
string command или char command
Как мне это прочитать? Сейчас я делаю с помощью memcpy но когда пытаюсь достать string он выдает его с лишним символом в конце
Не могли бы вы мне помочь и дать информацию по этому вопросу? как правильно все это организовать.
int countByte = recv(client->get_socket(), bufferT, 2048, 0);
int opcode;
memcpy(&opcode, bufferT + p, 4);
p += 4;
int keyLen;
memcpy(&keyLen, bufferT + p, 4);
p += 4;
char server_key[keyLen];
memcpy(&server_key, bufferT + p, keyLen);
p += keyLen;
Можно добавить пару вспомогательных функций (на будущее):
template <class T>
T read_pod(const char*& buffer) {
static_assert(std::is_pod<T>::value, "only pod types are allowed here");
T value{};
std::memcpy(reinterpret_cast<char*>(&value), buffer, sizeof(T));
buffer += sizeof(T);
return value;
};
std::string read_string(const char*& buffer, size_t length) {
std::string value;
value.resize(length);
std::memcpy(&value[0], buffer, length);
buffer += length;
return value;
};
Полный код с примером использования
Нюансы:
int
, а конкретный uint32_t
.char arr[non_const_var]
- это не является стандартом языка. Но если очень хочется, замените на char server_key[keyLen + 1]{};
и всё заработает. Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Имеется массив с положительными элементами (N элементов)Районном называется отрезок (l, r) (использовать нужно K районов, ни меньше ни больше),...