私の C++ の知識は悪臭を放ち、C++ 関数を正しい方法で変換する必要があります。
これは私が持っているコードです ( http://www.sky.franken.de/doxy/xmlstorage/c++/base64_8cpp_source.htmlから抽出)。
void* base64_decode(const char* s, size_t& data_len)
{
size_t len = strlen(s);
if (len % 4)
throw Exception("invalid BASE64 string length");
unsigned char* data = (unsigned char*) malloc(len/4*3);
int n[4];
unsigned char* q = (unsigned char*) data;
for(const char*p=s; *p; ) {
n[0] = POS(*p++);
n[1] = POS(*p++);
n[2] = POS(*p++);
n[3] = POS(*p++);
if (n[0]==-1 || n[1]==-1)
throw Exception("invalid BASE64 encoding");
if (n[2]==-1 && n[3]!=-1)
throw Exception("invalid BASE64 encoding");
q[0] = (n[0] << 2) + (n[1] >> 4);
if (n[2] != -1) q[1] = ((n[1] & 15) << 4) + (n[2] >> 2);
if (n[3] != -1) q[2] = ((n[2] & 3) << 6) + n[3];
q += 3;
}
data_len = q-data - (n[2]==-1) - (n[3]==-1);
return data;
}
このヘッダーを持つには、この前の関数が必要です
void * base64_decode(const char* s, size_t * data_len)
つまり、ヘッダーの「&」と「*」の問題であることがわかります。ご覧のとおり、最初の関数にはこれがあります
size_t& data_len
ヘッダーにありますが、フォームのデータ長を受け入れる必要があります
size_t * data_len
1 番目を 2 番目に変換する方法、つまり、"size_t *" として提供される data_len で機能させるために、メソッドでどのような変更を行う必要があるのか わかりません。