C++ 如何在环形缓冲区中写入字符串和整数?

C++ 如何在环形缓冲区中写入字符串和整数?,c++,circular-buffer,C++,Circular Buffer,如何在环形缓冲区中写入字符串和整数?我想把多个字符串和整数写入环形缓冲区,但是我的C++知识有限。如果你需要更多的信息,请告诉我。我感谢你能提供的任何帮助 以下是我要写入的整数和字符串变量以及环形缓冲区的写入函数: string payload; int byte_pos; size_t ringbuffer::write(u_char *data, size_t bytes) { if (bytes == 0) return 0; size_t capacity = capacit

如何在环形缓冲区中写入字符串和整数?我想把多个字符串和整数写入环形缓冲区,但是我的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;
}
字符串有效载荷;
int字节位置;
size\u t ringbuffer::write(u\u char*数据,大小\u t字节)
{
如果(字节==0)返回0;
尺寸=容量=容量;
size\u t bytes\u to\u write=std::min(字节,容量-大小);
//一步到位

如果(bytes_to_write,则必须将
std::string
变量转换为指向char的C样式指针:

string payload;
char* cpayload = payload.c_str();
int len = strlen(cpayload);
ringbuffer::write(cpayload, len*sizeof(char));

这似乎是什么工作,但我还没有验证我在环缓冲区中得到了什么,虽然没有错误

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

请详细说明您的问题:您想做什么?只需使用给定的输入调用此函数?是的,我无法正确获取参数。我尝试了(payload,sizeof(payload))例如,还有许多其他的事情,但我总是得到无效的参数。所以我的问题是,如何调用函数一次用于字符串,一次用于整数。感谢您对这件事的关注。它是“字符串和数字的缓冲区”还是“字符串或数字的缓冲区”你会使用一个<代码>结构> <代码>或<代码>联合> /COD>。代码示例是不完整的,并且没有关于它应该如何工作的评论。对我来说,它看起来更像一些混乱(比如使用C++语法的汇编语言)而不是环形缓冲区。无效的参数候选是:(unsigned char*,unsigned int)然后使用
len
unsigned int len=(unsigned int)strlen(cpayload)*sizeof(char)
作为第二个参数。仍然不是工作伙伴,但我想我发现了问题所在。如果你有兴趣,可以查看我的答案,谢谢你关注这件事。