2009-03-01 9 views
1

Je veux appliquer les mesures suivantes ont un tampon de caractères et le code que je suis en train de le port met ce tampon de caractères dans un cours d'eau et ne alors obtenir comme celui-ciImplémenter l'istream pour un tampon de caractères?

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

EDIT: Est-ce le code ci-dessus optimal, où Pour getVal, vous copiez le tampon entier dans un flux, puis faites un get sur le flux.

Comment puis-je obtenir la valeur getVal à partir du tampon lui-même.

Répondre

1

Je ne crois pas que ce soit optimal, simplement parce que la construction d'une chaîne std :: causera probablement une copie sur l'ensemble du tampon. L'utilisation de istringstream, cependant, semble bien.

Pour obtenir directement du tampon que vous pourriez faire quelque chose comme ceci:

int bufferPos = 0; 

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

Vous pouvez mettre une meilleure interface sur ce point, cependant. Il peut y avoir une meilleure façon de construire un istringstream avec un char * aussi, mais je n'en ai pas vu en parcourant rapidement les docs.

+0

Nitpick mineur: Ne devrait pas obtenir() retourner -1 sur EOF? –

Questions connexes