2012-10-09 62 views
5

Tengo un Data-Url de un archivo como std: string. Los base64 de datos codificados tiene que ser decodificada y luego ser pasado a esta función:C++ URL de datos como cadena a const byte *

open (const byte * data, long size) 

Así primera i extraer los datos codificados

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

Entonces i uso este base64 decoder

std::string decoded = base64_decode(encoded); 

Bueno, ¿cómo puedo convertir 'decodificado' de tipo cadena a byte *? El siguiente código produce un error

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

/EDIT: lo que no es un typedef

typedef uint8_t  byte 

los datos codificados es una imagen!

+0

Asegúrese de incluir el encabezado que define 'byte' y usar [' decoded.data() '] (http://en.cppreference.com/w/cpp/string/basic_string/data). – Joe

+0

¿Dónde se declara la función abierta? ¿Es un miembro de una clase? parte de un espacio de nombres? –

+0

Y si no hay uno, diablos! es probable que sea un typedef para 'unsigned char'. –

Respuesta

1

Parece que va a extraer const. c_str() devuelve un const char *. Tu elenco debe ser (const byte *).

+1

Debe usar data() en lugar de c_str(), ya que solo desea acceder a la representación binaria de std :: string, no a una versión con un byte \ 0 agregado. Podría ser que c_str() sea más costoso que data(). – h2stein

-1

byte es un carácter sin signo. tratar open((unsigned char *)decoded.c_str(), decoded.size() + 1);

y sí, en función de lo que estaba codificado en base 64 de la cadena original, es posible que desee utilizar un enfoque diferente para la decodificación de

Cuestiones relacionadas