2009-04-30 2 views
1

Ich habe ein C++ - Programm, das die Eingabe von einer Linux-Pipe übernimmt und zur weiteren Verarbeitung an std :: cout ausgibt.C++ X-Bytes von std :: cin lesen und Strings auf X-Byte-Länge abschneiden

Derzeit mein Code sieht wie folgt aus:

std::istreambuf_iterator<char> it(std::cin); 
std::istreambuf_iterator<char> end; 
std::string str(it, end); 

//Lots of string manipulation here. 

str = str.substr(0, 65535); 
std::cout << str << std::endl; 

Dies ist verschwenderisch, da die eingehenden Strings sind riesig.

  1. Wie lese ich nur rund 100kB von cin in eine C++ - Zeichenfolge und den Rest ignorieren?
  2. Wie kann ich die C++ - Zeichenfolge auf 65535 Bytes anstelle von Zeichen abgeschnitten? (Ich muss Multi-Byte-Zeichen in Zukunft zu handhaben.)

Antwort

2
  1. std :: cin.read (& buf, 100 * 1024);
  2. Std :: String.Size() gibt Anzahl Bytes zurück, ich bin ziemlich sicher.
+0

Ja, std :: string denkt in Bytes; es kennt UTF-8 nicht von der Codepage 932 –