2011-10-03 11 views
26

अगर मैं की तरह एक बफर था:हेक्स प्रतिनिधित्व में एक stringstream में एक बफर हो रही है:

uint8_t buffer[32]; 

और इसे पूरी तरह से मूल्यों के साथ भरा हुआ था, मैं इसे कैसे एक stringstream में मिल सकता है षोडश आधारी प्रतिनिधित्व में, के साथ छोटे मूल्यों पर 0-पैडिंग?

मैंने कोशिश की:

std::stringstream ss; 
for (int i = 0; i < 32; ++i) 
{ 
    ss << std::hex << buffer[i]; 
} 

लेकिन जब मैं stringstream से बाहर स्ट्रिंग ले, मैं एक मुद्दा है: मान < 16 बाइट्स केवल एक वर्ण ले प्रतिनिधित्व करने के लिए, और मैं उन्हें चाहते हैं होने के लिए 0 गद्देदार

उदाहरण के लिए यदि बाइट्स 1 और 2 सरणी में थे {32} {4} मेरी stringstream होगा:

204 instead of 2004 

मैं stringstream स्वरूपण 0-गद्दी किसी भी तरह जोड़ने के लिए लागू कर सकते हैं? मुझे पता है कि मैं इसे स्प्रिंटफ के साथ कर सकता हूं, लेकिन धाराओं को पहले से ही बहुत सारी जानकारी के लिए इस्तेमाल किया जा रहा है और यह किसी भी तरह से इसे हासिल करने में एक बड़ी मदद होगी। धारा संशोधक पर

+2

आपने शीर्षक में "सही" क्यों रखा? क्या आपको लगता है कि अन्यथा आपको केवल सही उत्तर मिल जाएगा? टाइटल छिद्रपूर्ण और सार्थक होना चाहिए ... –

+2

वहां, मैंने आपके लिए शब्द मारे: पी –

उत्तर

41
std::stringstream ss; 
ss << std::hex << std::setfill('0'); 
for (int i = 0; i < 32; ++i) 
{ 
    ss << std::setw(2) << static_cast<unsigned>(buffer[i]); 
} 
+5

प्रत्येक मूल्य के लिए केवल 'setw' की आवश्यकता है; अन्य चिपचिपा हैं। –

+0

ओह: भूल गए कि आपको ठीक से काम करने के लिए बाइट डालने की आवश्यकता है। –

+0

@AlanStokes धन्यवाद, आपके सुझाव के अनुसार संपादित किया गया। –

6

देखो: std::setw और std::fill

+0

+1 क्योंकि यह पहला जवाब था और इसी तरह की चीजें कहा :) –

+0

त्वरित सुधार, मेरा मानना ​​है कि थॉमस का मतलब था 'std :: setfill'। –