Реализовать istream get для буфера символов? - PullRequest
1 голос
/ 01 марта 2009

Я хочу реализовать следующее: есть символьный буфер, и код, который я пытаюсь портировать, помещает этот символьный буфер в поток, а затем получает вот так

 char *buffer; //this is initialized
 int bufferSize;  //this is initlized
 std::istringstream inputStream (std::string(buffer, bufferSize));
 int getVal = inputStream.get();

РЕДАКТИРОВАТЬ: является ли приведенный выше код оптимальным, при этом для getVal вы копируете весь буфер в поток, а затем выполняете его получение.

Как я могу получить значение getVal из самого буфера.

1 Ответ

1 голос
/ 02 марта 2009

Я не верю, что это оптимально, просто потому, что построение std :: string может привести к копированию всего буфера. Однако использование istringstream выглядит нормально.

Чтобы получить напрямую из буфера, вы можете сделать что-то вроде этого:

int bufferPos = 0;

char getFromBuffer ()
{
  if (bufferPos < bufferSize)
  {
    return buffer[bufferPos++];
  }
  else
  {
    return 0;
  }
}

Возможно, вы захотите использовать лучший интерфейс для этого. Возможно, есть лучший способ создать istringstream с помощью char *, но я не видел его при быстром просмотре документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...