c++ - How to convert a char array into string based hex-stream (ostringstream) -


सी ++ में (जीसीसी के साथ लिनक्स पर) मैं एक बाइट सरणी ( vector & lt; unsigned char & gt; ) को ostringstream या स्ट्रिंग

मुझे पता है कि मैं sprintf का उपयोग कर सकता हूं लेकिन यह चार * भी उपयोग करने का सबसे अच्छा तरीका प्रतीत होता है।

btw:

संपादित करें: सभी उत्तर काम करते हैं दूर। लेकिन मेरा अर्थ नहीं था, कि मैं बाइट्स / हेक्स-वैल्यू को अपनी स्ट्रिंग प्रस्तुति में परिवर्तित करना चाहूंगा, जैसे, vector & lt; .. & gt; = {0,1,2} - & gt; स्ट्रिंग = "000102" उस लापता लेकिन महत्वपूर्ण विस्तार के लिए क्षमा करें

अप वोट पाने का थोड़ा मौका, लेकिन चूंकि यह < एएम> बिल्कुल ओपी ने क्या पूछा, और कोई अन्य जवाब, चयनित एक भी शामिल नहीं है, अजीब तरह से, ऐसा करता है:

  #include & lt; iostream & gt; # शामिल करें & lt; sstream & gt; # शामिल करें & lt; vector & gt; # शामिल करें & lt; iomanip & gt; // स्ट्रीम के माध्यम से रूपांतरण के लिए bin2hex द्वारा उपयोग किया जाता है Struct bin2hex_str {std :: ostream & amp; ओएस; Bin2hex_str (std :: ostream & amp; os): ओएस (ओएस) {} शून्य ऑपरेटर () (अहस्ताक्षरित चार च) {os & lt; & lt; Std :: hex & lt; & lt; Std :: setw (2) & lt; & lt; static_cast & LT; पूर्णांक & gt; (ch); }}; // अहस्ताक्षरित चारों की एक सदिश को हेक्स स्ट्रिंग std :: स्ट्रिंग बिन 2हेक्स (कॉन्स्ट स्टडी :: वेक्टर और लेफ्टिनेंट; अहस्ताक्षरित चार & amp;; बिन) के लिए परिवर्तित करें {std :: ostringstream oss; ओएसएस एंड एलटी; & lt; std :: setfill ( '0'); Std :: for_each (bin.begin (), bin.end (), bin2hex_str (oss)); वापसी oss.str (); } // या उन लोगों के लिए जो सी ++ 11-संगत संस्करण std :: string bin2hex11 (const std :: vector & lt; अहस्ताक्षरित चार & amp;; बिन) के लिए चाहते हैं {std :: ostringstream oss; ओएसएस एंड एलटी; & lt; std :: setfill ( '0'); Std :: for_each (bin.begin (), bin.end (), [& amp; oss] (अहस्ताक्षरित चार च) {oss & lt; & lt; std :: hex & lt; & lt; std :: setw (2) & lt; & Lt; static_cast & lt; int & gt; (ch);}); वापसी oss.str (); }  

वैकल्पिक स्ट्रीम डंप

यदि आप जो करना चाहते हैं, तो एक अहस्ताक्षरित चार निश्चित एरे डंप है सुचारू रूप से ऐसा करते हैं, जो लगभग सभी के ऊपर नहीं है।

  टेम्पलेट & lt; size_t N & gt; std :: ostream & amp; ऑपरेटर & lt; & lt; (std :: ostream & amp; os, कॉन्स्ट अहस्ताक्षरित चार (& amp; एआर) [एन]) {स्थिर कॉन्स्ट चार्ल्स अल्फा [] = "0123456789 एबीसीडीईएफ"; के लिए (आकार_टी i = 0; i & lt; N; ++ i) {os.put (अल्फा [(आर [i]> gt; 4) & amp; 0xF]); ओज़पुट (अल्फा [एआर [आई] और 0xF]); } वापसी ओएस; }  

मैं हर समय इसका उपयोग करता हूं जब मैं एक निश्चित बफ़र्स को ओस्ट्रीम डेरिवेटिव में डंप करना चाहता हूं। कॉल मृत-सरल है:

  अहस्ताक्षरित चार डेटा [64]; ... भरण डेटा [] के साथ, ठीक है ... डेटा ... cout & lt; & lt; डेटा & lt; & lt; endl;  

Comments