2012-10-09 11 views
5

私はstd:stringとしてファイルのData-Urlを持っています。私はこのbase64 decoderconst-byteへの文字列としてのC++ Data-Url *

std::string decoded = base64_decode(encoded); 

を使用

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

そしてエンコードされたデータを抽出したがって、最初

open (const byte * data, long size) 

: BASE64符号化データが復号されると、この関数に渡される有しますでは、文字列型の 'デコード済み'をbyte *にキャストする方法はありますか? 次のコードは、エラー/ EDIT

open((byte *)decoded.c_str(), decoded.size() + 1); 
//>>error: 'byte' was not declared in this scope 

を生成する:これのtypedef

typedef uint8_t  byte 

符号化データが画像ではあります!

+0

「byte」を定義するヘッダーを含め、['decoded.data()'](http://en.cppreference.com/w/cpp/string/basic_string/data)を使用してください。 – Joe

+0

オープン関数はどこで宣言されていますか?それはクラスのメンバーですか?名前空間の一部ですか? –

+0

もし存在しなければ、一体!おそらく 'unsigned char'のtypedefです。 –

答えて

1

をデコードに異なるアプローチを使用する場合があります。 c_str()const char *を返します。キャストは(const byte *)である必要があります。

+1

追加された\ 0バイトのバージョンではなく、std :: stringのバイナリ表現にアクセスしたいので、c_str()の代わりにdata()を使うべきです。 c_str()はdata()よりもコストがかかります。 – h2stein

-1

バイトは符号なしの文字です。はいopen((unsigned char *)decoded.c_str(), decoded.size() + 1);

を試してみて、オリジナルのbase64文字列にエンコードされたものに応じて、あなたはconstを削除しているように見えます