Как записать строки и целые числа в кольцевом буфере?

0

Как написать строки и целые числа в кольцевом буфере? Я хотел бы написать несколько строк и целых чисел в кольцевой буфер, но мои знания c++ ограничены. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Я ценю любую помощь, которую вы можете предоставить.

Вот целые и строковые переменные, которые я хочу записать, и функцию записи кольцевого буфера:

string payload;
int byte_pos;

size_t ringbuffer::write(u_char *data, size_t bytes)
{
  if (bytes == 0) return 0;

  size_t capacity = capacity_;
  size_t bytes_to_write = std::min(bytes, capacity - size_);

  // Write in a single step
  if (bytes_to_write <= capacity - end_index_)
  {
    memcpy(data_ + end_index_, data, bytes_to_write);
    end_index_ += bytes_to_write;
    if (end_index_ == capacity) end_index_ = 0;
  }
  // Write in two steps
  else
  {
    size_t size_1 = capacity - end_index_;
    memcpy(data_ + end_index_, data, size_1);
    size_t size_2 = bytes_to_write - size_1;
    memcpy(data_, data + size_1, size_2);
    end_index_ = size_2;
  }

  size_ += bytes_to_write;
  return bytes_to_write;
}
  • 0
    Пожалуйста, уточните свой вопрос: что вы хотите сделать? Просто вызвать эту функцию с заданными вами входами?
  • 0
    Да, я не могу получить правильные аргументы. Я пробовал с (полезная нагрузка, sizeof (полезная нагрузка)), например, а также много других вещей, но я всегда получаю недопустимые аргументы. Поэтому мой вопрос заключается в том, как вызвать функцию один раз для строки и один раз для целого числа. Благодарим Вас за внимание к этому вопросу.
Теги:
circular-buffer

2 ответа

0

Это то, что, похоже, работает, но я еще не подтвердил, что именно я получаю в ringbuffer, но ошибок нет.

ringbuffer::write((u_char*) payload.c_str(), payload.length());
ringbuffer::write((u_char*) &byte_pos, sizeof(byte_pos));
0

Вы должны преобразовать вашу std::string переменную в указатель стиля C к char:

string payload;
char* cpayload = payload.c_str();
int len = strlen(cpayload);
ringbuffer::write(cpayload, len*sizeof(char));
  • 0
    Недопустимые аргументы. Кандидаты: unsigned int write (unsigned char *, unsigned int)
  • 0
    Затем unsigned int len = (unsigned int) strlen(cpayload) * sizeof(char) len : unsigned int len = (unsigned int) strlen(cpayload) * sizeof(char) и используйте len в качестве второго аргумента.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню