मेरे पास unsigned char*
है, इसे std::string
पर परिवर्तित करना चाहते हैं। क्या आप कृपया मुझे ऐसा करने का सबसे सुरक्षित तरीका बता सकते हैं?सी ++ में unsigned char * से std :: स्ट्रिंग को कैसे परिवर्तित करें?
उत्तर
के किसी भी उपयोग कर सकते हैं तुम सिर्फ एक चार में अहस्ताक्षरित चार कास्ट करने के लिए के रूप में स्ट्रिंग वर्ग एक निर्माता नहीं है की जरूरत है कि स्वीकार करता है अहस्ताक्षरित चार:
unsigned char* uc;
std::string s(reinterpret_cast< char const* >(uc)) ;
लेकिन, आप, यदि आपका बाइट सरणी nulls शामिल निर्माता में लंबाई तर्क का उपयोग करने की आवश्यकता होगी के रूप में अगर यो यू न केवल सरणी के भाग के स्ट्रिंग (प्रथम अशक्त करने के लिए सरणी)
size_t len;
unsigned char* uc;
std::string s(reinterpret_cast<char const*>(uc), len) ;
BYTE * pbData = "SomeString" size_t length = 10 मेरे पास हाथ से पहले की लंबाई है, इसलिए मैंने इसका उपयोग किया: I इस विधि का प्रयोग किया, "std :: string (reinterpret_cast
एक पोर्टेबिलिटी पेडेंट के रूप में, मैं यह इंगित करना चाहता हूं कि यह केवल 2 के पूरक अंकगणितीय वाले सिस्टम पर काम करता है। 1 के पूरक या साइन-परिमाण आर्किटेक्चर पर, 'char *' और 'unsigned char *' के बीच reinterpret_cast को सुरक्षित नहीं है (ठीक है, यह सुरक्षित है, लेकिन यदि आपको 'char' हस्ताक्षरित किया गया है और किसी भी वर्ण में आश्चर्यचकित परिणाम मिलेंगे शीर्ष बिट सेट है)। इस मामले में प्रश्नकर्ता स्पष्ट रूप से विंडोज पर है, इसलिए कोई समस्या नहीं है। –
BYTE *str1 = "Hello World";
std::string str2((char *)str1); /* construct on the stack */
वैकल्पिक रूप से:
std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;
यह काम नहीं करता है, मुझे यह कहते हुए एक त्रुटि मिलती है कि "std :: basic_string <_Elem, _Traits, _Ax> :: basic_string (const std :: allocator <_Ty> और) ':' BYTE * 'से' const 'में पैरामीटर 1 को परिवर्तित नहीं कर सकता std :: allocator <_Ty> और ' – Unicorn
ऐसा इसलिए है क्योंकि 'std :: string' में कोई कन्स्ट्रक्टर नहीं है जो' हस्ताक्षरित char * 'लेता है, और इसलिए संकलक आवंटकों के लिए टेम्पलेट किए गए कन्स्ट्रक्टर पर वापस आ जाता है। आपको या तो 'std :: string (Iterator start, Iterator end) ', या' std :: string (const char *, std :: size_t n)' का उपयोग करने की आवश्यकता है और BYTE * को char * –
'std पर डालना होगा: : स्ट्रिंग और str3 = नया ... ', क्या आपका मतलब '' '' '' '' '' 'था। और बीटीडब्ल्यू, ढेर पर std :: स्ट्रिंग बनाना आम तौर पर खराब विचार है और मूल्य semantics के साथ एक स्ट्रिंग वर्ग रखने के आधे उद्देश्य को हरा देता है। – sbk
BYTE*
शायद unsigned char*
के लिए एक typedef है, लेकिन मुझे यकीन है कि के लिए नहीं कह सकता। अगर आप हमें बताएंगे कि BYTE
क्या है तो इससे मदद मिलेगी।
यदि BYTE * हस्ताक्षरित char * है, तो आप std :: स्ट्रिंग रेंज कन्स्ट्रक्टर का उपयोग करके इसे std :: स्ट्रिंग में परिवर्तित कर सकते हैं, जिसमें दो सामान्य Iterators होंगे।
const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World");
int len = strlen(reinterpret_cast<const char*>(str1));
std::string str2(str1, str1 + len);
कहा जा रहा है, क्या आप वाकई यह एक अच्छा विचार है? यदि BYTE
unsigned char
में गैर-ASCII वर्ण हो सकते हैं, जिसमें NULL शामिल हो सकते हैं। यह strlen
गलत लम्बाई देगा।
बाइट लेकिन typedef unsigned char BYTE;
कुछ भी नहीं आप आसानी से नीचे कंस्ट्रक्टर्स
string (const char * s, size_t n);
string (const char * s);
तो CryptoPP की पहुंच है में खत्म हो जाएगा करते
पठनीय हेक्स स्ट्रिंग अहस्ताक्षरित चार को
std::string& hexed = "C23412341324AB";
uint8_t buffer[64] = {0};
StringSource ssk(hexed, true,
new HexDecoder(new ArraySink(buffer,sizeof(buffer))));
और वापस
std::string hexed;
uint8_t val[32] = {0};
StringSource ss(val, sizeof(val), true,new HexEncoder(new StringSink(hexed));
// val == buffer
- 1. 'void *' से 'unsigned char *'
- 2. कनवर्ट करना (शून्य *) से std :: vector <unsigned char>
- 3. std :: string को const char * में कैसे परिवर्तित करें?
- 4. int से char * में कैसे परिवर्तित करें?
- 5. char (char * नहीं) से std :: स्ट्रिंग
- 6. Char * से BSTR को कैसे परिवर्तित करें?
- 7. std :: स्ट्रिंग बनाम char *
- 8. सी ++ std :: स्ट्रिंग और नल कॉन्स char *
- 9. jbyteArray को देशी char * में jni में कैसे परिवर्तित करें?
- 10. सी स्टाइल स्ट्रिंग को सी ++ स्टाइल स्ट्रिंग में परिवर्तित करना
- 11. प्लेटफ़ॉर्म :: स्ट्रिंग टू char * को कैसे परिवर्तित करें?
- 12. जेएनआई में char [] से jstring को कैसे परिवर्तित करें?
- 13. एनएसएसटींग से सी स्ट्रिंग को कैसे परिवर्तित करें?
- 14. एक सुरक्षित तरीके से char * से std :: स्ट्रिंग बनाएं
- 15. std :: string में एक const char * को कैसे स्टोर करें?
- 16. सी ++ सीएलआर में सरणी <System :: Byte> char char * को कैसे परिवर्तित करें?
- 17. बिना हस्ताक्षर किए गए char का परिणाम << unsigned char हस्ताक्षरित नहीं है char
- 18. स्ट्रिंग^से char *
- 19. सी-शैली स्ट्रिंग को एक सी ++ std :: स्ट्रिंग
- 20. सुविधाजनक स्ट्रीम std :: vector <unsigned char> इनपुट स्ट्रीम (std :: istream) ऑब्जेक्ट
- 21. मैं स्ट्रिंगस्ट्रीम से सी ++ में स्ट्रिंग में कैसे परिवर्तित करूं?
- 22. क्या सी में char [] से char * को परिवर्तित करना संभव है?
- 23. वेक्टर चार * वेक्टर <unsigned char> Initalisation
- 24. org.jdom.Document से स्ट्रिंग को कैसे परिवर्तित करें
- 25. स्ट्रिंग [] से ArrayList को कैसे परिवर्तित करें?
- 26. ascii को unsigned int
- 27. Guid [] से स्ट्रिंग को कैसे परिवर्तित करें?
- 28. सी में मैन्युअल रूप से दशमलव मान को हेक्साडेसिमल स्ट्रिंग में कैसे परिवर्तित करें?
- 29. एक char को बाइनरी में कैसे परिवर्तित करें?
- 30. सी में चार से पूर्णांक को कैसे परिवर्तित करें?
सी ++ ताकि आप हमें बताने के लिए किस प्रकार का वास्तव में है की जरूरत है, एक बाइट प्रकार नहीं है। – Yacoby
BYTE "हस्ताक्षरित चार" – Unicorn
और 'बाइट' के बारे में क्या है? और सबसे महत्वपूर्ण बात यह है कि आप पॉइंटर को क्या इंगित करते हैं? एक 'बाइट' मान या 'बाइट' की सरणी? आप अपनी स्ट्रिंग में क्या चाहते हैं: ऑब्जेक्ट (ओं) के मानों का प्रतिनिधित्व करने वाले सूचक या स्ट्रिंग के मान का एक पाठ्य प्रतिनिधित्व? –