इस प्रकार मेरे मामले जाता है:सी ++ std :: stringstream संचालन अनुकूलन
- मैं एक बाइनरी फ़ाइल मैं std :: fstream साथ से पढ़ रहा हूँ के रूप में (चार *)
- मेरा लक्ष्य है पढ़ा आपरेशन है फ़ाइल, हेक्स स्वरूपित से हर बाइट ले, और फिर एक स्ट्रिंग चर से संलग्न करने के लिए
- स्ट्रिंग चर प्रति आइटम 2.
उदाहरण के लिए के रूप में स्वरूपित फ़ाइल की संपूर्ण सामग्री धारण करना चाहिए, मान लें मेरे पास निम्नलिखित बिन है ary फ़ाइल सामग्री:
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();
दृष्टिकोण से ऊपर काम करता है के रूप में उम्मीद, हालांकि, यह है:
D0 46 98 57 A0 24 99 56 ए 3
तरह से मैं प्रत्येक बाइट स्वरूपण कर रहा हूँ इस प्रकार है बड़ी फ़ाइलों के लिए बेहद धीमी, जो मैं समझता हूं; स्ट्रिंगस्ट्रीम इनपुट स्वरूपण के लिए है!
मेरा सवाल है, क्या ऐसे कोड या दृष्टिकोण को अनुकूलित करने के तरीके हैं जो मैं सभी एक साथ ले रहा हूं? मेरा एकमात्र बाधा यह है कि आउटपुट ऊपर दिखाए गए अनुसार स्ट्रिंग प्रारूप में होना चाहिए।
धन्यवाद।
iostreams दक्षता के लिए डिज़ाइन नहीं किया गया है। विशिष्ट उपयोग मामलों के लिए, आप मूल कार्यान्वयन-विशिष्ट फ़ाइल I/O को हरा नहीं सकते हैं। या, बदतर मामले में, सी की 'फ़ाइल *' लें, और अपना खुद का, हाथ-अनुकूलित हेक्स रूपांतरण कोड रोल करें। दक्षता के लिए इसे हरा नहीं सका। यह कोई रॉकेट साईंस नहीं है। कम से कम उन दिनों में जब मैंने सी और सी ++ सीखा, यह एक ठेठ होमवर्क असाइनमेंट था: हेक्साडेसिमल पढ़ें, और इसे परिवर्तित करें। –
क्या तुलना में "बेहद धीमी" है? आउटपुट स्ट्रिंग के लिए –
क्या आपने [रिजर्व आकार] (https://stackoverflow.com/q/1941064/995714) का प्रयास किया था? आप पहले से ही इनपुट के आकार को जानते हैं, इसलिए आउटपुट के आकार की गणना करना आसान है और कई बार –