aşağıdaki Davam gibidir: C++ std :: stringstream işlemleri optimizasyonlar
- I (char *)
- Amacım olduğu gibi bir ikili ben std :: fstream ile gelen okuyorum dosyayı okumak operasyon var dosyada, altıgen biçimli her bayt almak ve sonra değişken bir dizeye eklemek için
- diyelim Örneğin 2.
ürün başına biçimlendirilmiş dosyanın tüm içeriği tutmak gerekir dize değişkeni Aşağıdaki bölüme sahibim beklendiği gibi yaklaşımda Üstü
stringstream fin;;
for (size_t i = 0; i < fileb_size; ++i)
{
fin << hex << setfill('0') << setw(2) << static_cast<uint16_t>(fileb[i]);
}
// this would yield the output "D0469857A0249956A3"
return fin.str();
Ancak öyle işler: ary dosya içeriği şu şekildedir:
D0 46 98 57 A0 24 99 56 A3
Her byte biçimlendirme ediyorum yoludur Anladığım büyük dosyalar için çok yavaş; stringstream giriş formatlaması içindir!
Sorum şu: Bu kodu ya da hep birlikte aldığım yaklaşımı optimize etmenin yolları var mı? Benim tek kısıtlama, çıktının yukarıda gösterildiği gibi dize formatında olması gerektiğidir.
Teşekkür ederiz.
iostreams verimlilik için tasarlanmamıştır. Belirli kullanım durumları için, yerel uygulamaya özgü dosya G/Ç'yi geçemezsiniz. Ya da, daha da kötüsü, C'nin 'FILE *' al ve kendi el ile optimize edilmiş hex dönüşüm kodunu. Verimlilik için bunu yenemedim. Bu roket bilimi değil. En azından C ve C++ öğelerini öğrendiğim günlerde, bu tipik bir ev ödevi göreviydi: onaltılık oku ve dönüştür. –
Neye kıyasla “Son derece yavaş”? –
Çıkış dizesi için [boyut ayırma] (https://stackoverflow.com/q/1941064/995714) denediniz mi? Girişin boyutunu zaten biliyorsunuz, bu yüzden çıktı büyüklüğünü hesaplamak ve diziyi birçok kez yeniden tahsis etmekten kaçınmak –