Kopieren Sie bequem std :: vectorunsigned char in den Eingangsstrom (std :: istream) -Objekt

7

Ich versuche, eine Funktion zu verwenden, die in einer Libelle von Drittanbietern enthalten ist, und erwarte ein Eingabe-Stream-Objekt, in dem binäre Dateidaten transportiert werden.

Die Unterschrift sieht so aus:

%Vor%

Da ich diese lib / Funktion von Drittanbietern nicht ändern / ändern kann, muss ich meinen Code anpassen. In der aufrufenden Stelle habe ich einen std :: vector, der die Daten enthält, die in einem istream-Objekt übergeben werden sollen. Momentan kopiere ich den Vektor in den Stream, indem ich darüber iteriere und den & lt; & lt; Operator zum byteweisen Kopieren.

Ich vermute stark, dass es einen effektiveren / bequemeren Weg geben könnte, aber bisher nichts brauchbares finden konnte. Jede Hilfe / Ihre Gedanken werden sehr geschätzt.

Am besten, JR

    
Rip-Off 20.02.2012, 08:47
quelle

2 Antworten

7
%Vor%     
Peter Wood 20.02.2012, 08:59
quelle
15

Sie können vector der Zeichen als zugrunde liegenden Puffer für einen Eingabestream verwenden, ohne den Inhalt des Vektors zu kopieren:

%Vor%

@NeilKirk meldet, dass die oben genannte Methode zur Verwendung von pubsetbuf nicht portierbar ist .

Ein portabler Weg ist die Verwendung von boost::iostreams library. So erstellen Sie einen Eingabestream aus einem Vektor, ohne dessen Inhalt zu kopieren:

%Vor%     
Maxim Egorushkin 20.02.2012 08:59
quelle