Duda pasar de vector<BYTE> a string en C++

Iniciado por Kaxperday, 11 Junio 2016, 22:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Código (cpp) [Seleccionar]

std::string ArrayToString(std::vector<BYTE> data)
{
std::string ret;

for (BYTE b : data)
{
ret += (CHAR)b;
}

return ret;
}


También he probado:

Código (cpp) [Seleccionar]

ret = std::string(reinterpret_cast<CHAR*>(data.data()), data.size());


Estoy lanzando una petición a una página con curl, y la parte del body con la respuesta (la obtengo en string con curl), pero luego la paso a vector<BYTE>, para hacer Inflate si está comprimido etc, y si no tiene ninguna compresión ni es imagen, entonces lo pasa a cadena y trabaja con ella.

El caso que para convertir el vector a cadena falla, pero solo con páginas que son UTF-8 (unicode) y contienen caracteres especiales, sin embargo CURL parece que si que es capaz de recibir la respuesta en UTF-8 y cargarla en una string.

¿Debería de usar wstring o caracteres unicode? ¿o me estoy haciendo un lío? XD

Saludos.

Edito: El tema esta solucionado fuera una ida de olla mía, porque no entiendo porque al devolver la string me sale nula aun pasandola como referencia..wat
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

AlbertoBSD

Hola respecto a tu pregunta no se si te estes haciendo un lio o no.

Encontre este codigo:

Código (cpp) [Seleccionar]
stringstream ss;

for (unsigned int i=0; i < data.size(); i++
{
    ss << data[i];
}

string s_data = ss.str();


Espero y te funcione.

Solo hay algo qur me causa ruido.

Cita de: Kaxperday en 11 Junio 2016, 22:06 PM

Estoy lanzando una petición a una página con curl, y la parte del body con la respuesta (la obtengo en string con curl), pero luego la paso a vector<BYTE>, para hacer Inflate si está comprimido etc, y si no tiene ninguna compresión ni es imagen, entonces lo pasa a cadena y trabaja con ella.


Si en un principio ya era string y despues lo pasas a byte por que no usas el primer string que ya tenias.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Kaxperday

#2
Hola alberto gracias por la respuesta,

Es que estoy editando el tema mientras y bueno lo que hacía es pasar de string a vector<BYTE> y luego a string en este caso, el caso es que se pueden añadir a la string simplemente sin conversion como esta aunque con conversiones de más bytes también funcionarían, algo que se supone que ya sabía pero al pasarme el siguiente error pues busque fallos donde no tenía.

Lo que no entiendo porque la string me la devuelve nula:

Código (cpp) [Seleccionar]

std::string ArrayToString(std::vector<BYTE> data)
{
std::string ret;
std::cout << "Comienza la cadena:";
for (BYTE b : data)
{
ret += b;
}
std::cout << ret; system("pause");
return ret;
}


Código (cpp) [Seleccionar]

std::string fullMessage;
fullMessage = ArrayToString(data);
cout << fullMessage; system("pause");


:"DDD

Wow vuelve la magia, a veces funciona a veces no, a veces devuelve algo otras no¿? me parto XD.

Flipáis es por el system("pause") no me digáis como cohones influye en algo pero lo hace jajaja

Os lo prometo, pongo mostrar string + pause en la funcion y no devuelve nada, la muestro en la funcion (ponga o no pause) y la devuelve bien, jaja la magia. XD quizás sea por estar haciendo pruebas del servidor con el navegador, quizás en el tiempo que muestra la string en la funcion recibe nueva peticion y de alguna manera sobreescriba la anterior o algo así.

Bueno tema supongo :) , supongo que tendré que meditar más antes de postear porque ultimamente.. jajaja.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

class_OpenGL

No estoy muy seguro, pero ¿y si haces flush?

Código (cpp) [Seleccionar]
std::string fullMessage;
fullMessage = ArrayToString(data);
cout << fullMessage;
cout.flush();
system("pause");


Ya digo que no sé si estoy diciendo alguna tontería

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

Kaxperday

Cita de: class_OpenGL en 12 Junio 2016, 02:07 AM
No estoy muy seguro, pero ¿y si haces flush?

Pues no iba tampoco, pero no importa ya que no me interesa mostrar la cadena.

Saludos y gracias a todos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.