Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 11 Junio 2016, 22:06 pm



Título: Duda pasar de vector<BYTE> a string en C++
Publicado por: Kaxperday en 11 Junio 2016, 22:06 pm
Código
  1. std::string ArrayToString(std::vector<BYTE> data)
  2. {
  3. std::string ret;
  4.  
  5. for (BYTE b : data)
  6. {
  7. ret += (CHAR)b;
  8. }
  9.  
  10. return ret;
  11. }
  12.  

También he probado:

Código
  1. ret = std::string(reinterpret_cast<CHAR*>(data.data()), data.size());
  2.  

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


Título: Re: Duda pasar de vector<BYTE> a string en C++
Publicado por: AlbertoBSD en 11 Junio 2016, 23:57 pm
Hola respecto a tu pregunta no se si te estes haciendo un lio o no.

Encontre este codigo:

Código
  1. stringstream ss;
  2.  
  3. for (unsigned int i=0; i < data.size(); i++
  4. {
  5.    ss << data[i];
  6. }
  7.  
  8. string s_data = ss.str();

Espero y te funcione.

Solo hay algo qur me causa ruido.


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


Título: Re: Duda pasar de vector<BYTE> a string en C++
Publicado por: Kaxperday en 12 Junio 2016, 00:07 am
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
  1. std::string ArrayToString(std::vector<BYTE> data)
  2. {
  3. std::string ret;
  4. std::cout << "Comienza la cadena:";
  5. for (BYTE b : data)
  6. {
  7. ret += b;
  8. }
  9. std::cout << ret; system("pause");
  10. return ret;
  11. }
  12.  

Código
  1. std::string fullMessage;
  2. fullMessage = ArrayToString(data);
  3. cout << fullMessage; system("pause");
  4.  

:"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.


Título: Re: Duda pasar de vector<BYTE> a string en C++
Publicado por: class_OpenGL en 12 Junio 2016, 02:07 am
No estoy muy seguro, pero ¿y si haces flush?

Código
  1. std::string fullMessage;
  2. fullMessage = ArrayToString(data);
  3. cout << fullMessage;
  4. cout.flush();
  5. system("pause");

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


Título: Re: Duda pasar de vector<BYTE> a string en C++
Publicado por: Kaxperday en 12 Junio 2016, 10:16 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.