const char * zu vektorverzerrten char Initalisierung

8

Ich verstehe, dass die Verwendung von Vektor eine gute Möglichkeit ist, binäre Daten zu speichern, wenn C ++ und die STL verwendet werden. Für meine Komponententests möchte ich den Vektor jedoch mit einer const char * C-String-Variable initialisieren.

Ich versuche eine Variante des hier gefundenen Codes zu verwenden - Konvertieren (void *) zu std :: vector & lt; unsigned char & gt; - um dies zu tun:

%Vor%

Allerdings ist der VC ++ - Compiler mit der Zeile, die den Vektor initialisiert, nicht zufrieden:

%Vor%

Ich schätze die extreme Nichtigkeit dieser Frage und bin bereit für viel Kritik am obigen Code:)

Vielen Dank im Voraus, Chris

    
Mr Chris 21.03.2012, 06:26
quelle

4 Antworten

11

Es sollte

sein %Vor%

nicht

%Vor%     
Luchian Grigore 21.03.2012, 06:28
quelle
3

std::transform ist nur für diese Art von Problem nützlich. Sie können damit ein Stück Daten gleichzeitig "umwandeln". Siehe Dokumentation hier:

Ссылка

Der folgende Code funktioniert in VS2010. (Ich habe ein std::string von Ihrem const char* -Array erstellt, aber Sie könnten das wahrscheinlich vermeiden, wenn Sie das wirklich wollten.)

%Vor%     
aldo 21.03.2012 07:12
quelle
1

Hier ist was für mich funktionierte:

%Vor%     
serup 04.01.2017 08:51
quelle
0

Was Sie vorhatten, scheint etwas zu sein wie:

%Vor%

Die Zwischenvariable buffer ist nicht erforderlich. Die Konvertierung von char nach unsigned char erfolgt implizit.

Beachten Sie, dass das abschließende Zeichen 'testdata' nicht von cout << vec.data() übernommen wird. Wenn du also etwas wie buffertype vec(testdata, next(testdata, strlen(testdata) + 1)) machen könntest, könntest du das nicht können. Wenn Sie möchten, dass Sie tun könnten: 'string' oder Sie möchten vielleicht nur Folgendes tun:

%Vor%

Dies wird eine versteckte cout << vec beibehalten. Da dies kein cout << vec.data() ist, können Sie das nicht, %code% , aber %code% funktioniert. Ich habe ein Live-Beispiel für jedes dieser Elemente erstellt.

    
Jonathan Mee 13.06.2016 12:38
quelle