2012-10-09 18 views
5

मेरे पास एक फ़ाइल के Data-Url है जो std: string। मैं इनकोडिंग डेटा निकालनेसी ++ डेटा-यूआरएल स्ट्रिंग के रूप में स्ट्रिंग के रूप में *

size_t pos = dataurl.find_first_of(','); 
std::string encoded = dataurl.substr(spos + 1); 

तो मैं का उपयोग इस base64 decoder

std::string decoded = base64_decode(encoded); 

तो सबसे पहले

open (const byte * data, long size) 

: बेस 64 एन्कोडेड डेटा डीकोड किया जा करने के लिए और फिर इस समारोह के लिए पारित किया जाना है खैर, मैं बाइट * टाइप प्रकार स्ट्रिंग को 'डीकोडेड' कैसे लगा सकता हूं? निम्नलिखित कोड एक त्रुटि

open((byte *)decoded.c_str(), decoded.size() + 1); 
//>>error: 'byte' was not declared in this scope 
पैदा करता

/संपादित करें: तो वहाँ एक typedef

typedef uint8_t  byte 

इनकोडिंग डेटा एक छवि है!

+0

सुनिश्चित करें कि आप 'बाइट' को परिभाषित करने वाले हेडर को शामिल करें और ['decoded.data()'] (http://en.cppreference.com/w/cpp/string/basic_string/data) का उपयोग करें। – Joe

+0

खुला कार्य कहां घोषित किया गया है? क्या यह एक वर्ग का सदस्य है? नामस्थान का हिस्सा? –

+0

और यदि कोई नहीं है, तो बिल्ली! यह शायद 'हस्ताक्षरित चार' के लिए एक टाइपिफ़ है। –

उत्तर

1

ऐसा लगता है कि आप const हटा रहे हैं एक अलग दृष्टिकोण का उपयोग करना चाहें प्रयास करें। c_str()const char * देता है। आपकी कास्ट (const byte *) होना चाहिए।

+1

आपको c_str() के बजाय डेटा() का उपयोग करना चाहिए, क्योंकि आप केवल std :: स्ट्रिंग के बाइनरी प्रस्तुति तक पहुंचना चाहते हैं, एक अतिरिक्त \ 0 बाइट वाले संस्करण नहीं। यह हो सकता है कि, c_str() डेटा() से अधिक महंगा है। – h2stein

-1

बाइट एक हस्ताक्षरित चार है। open((unsigned char *)decoded.c_str(), decoded.size() + 1);

और हाँ, क्या मूल base64 स्ट्रिंग में एन्कोड किया गया था पर निर्भर करता है, तो आप डीकोड करने के लिए

संबंधित मुद्दे

 संबंधित मुद्दे