2014-12-05 2 views
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

Просьба уточнить свой вопрос: что вы хотите сделать? Просто позвоните этой функции с указанными входами? – tnull

+0

Да, я не могу правильно аргументировать. Я попробовал (например, полезную нагрузку, размер (полезную нагрузку)), а также многое другое, но всегда получаю недопустимые аргументы. Поэтому мой вопрос заключается в том, как вызвать функцию один раз для строки и один раз для целого числа. Благодарим Вас за внимание к этому вопросу. – gkatsarov

ответ

0

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

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) – gkatsarov

+0

Затем наберите 'len':' unsigned int len ​​= (unsigned int) strlen (cpayload) * sizeof (char) 'и используйте' len 'как второй аргумент. – tnull

+0

Все еще не работает, но я думаю, что выяснил, в чем проблема. Если вас это интересует, вы можете проверить мой ответ, спасибо за внимание к этому вопросу. – gkatsarov

0

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

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