2009-03-01 13 views
1

Ich mag einen Zeichenpuffer und der Code folgende Voraussetzungen erfüllt sein implementieren ich zu portieren versuchen in einem Strom mit diesem Zeichenpuffer versetzt und dann ein ähnlichenImplementierung von istream für einen Zeichenpuffer?

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

EDIT bekommt: Ist der obige Code optimal, wobei Für getVal kopieren Sie den gesamten Puffer in einen Stream und machen dann einen get im Stream.

Wie bekomme ich den getVal-Wert aus dem Puffer selbst.

Antwort

1

Ich glaube nicht, dass es optimal ist, einfach weil das Konstruieren einer std :: string wahrscheinlich eine Kopie auf dem gesamten Puffer verursachen wird. Die Verwendung von istringstream sieht jedoch gut aus.

Um direkt aus dem Puffer erhalten Sie so etwas tun könnte:

int bufferPos = 0; 

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

Sie möchten eine bessere Schnittstelle auf diese setzen, though. Es könnte auch einen besseren Weg geben, einen istringstream mit einem char * zu erstellen, aber ich habe keinen gesehen, während ich die Dokumente schnell durchsucht habe.

+0

Kleiner Nitpick: Sollte nicht() -1 auf EOF zurückgeben? –

Verwandte Themen