elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Clase contenedora de bytes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Clase contenedora de bytes  (Leído 1,944 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Clase contenedora de bytes
« en: 18 Octubre 2015, 17:30 pm »

Buenas, necesito escribir en un archivo y busco una clase contenedora de bytes, como por ejemplo podría ser vector<byte>, pero me vendría mejor una clase especializada, al igual que lo es string para cadenas de caracteres.

¿alguno sabe que clase es la que busco o si existe?, me vendría bien con métodos como find() etc.

Un saludo.


En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Clase contenedora de bytes
« Respuesta #1 en: 18 Octubre 2015, 17:42 pm »

Tienes a tu disposición todos los contenedores de la STD: vector, deque, list, ...
Si quieres find, u otra función, los tienes en la librería <algorithm>. Trabaja con iteradores, así que sirven para cualquier contenedor.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Clase contenedora de bytes
« Respuesta #2 en: 18 Octubre 2015, 21:07 pm »

Vamos que no hay un contenedor especializado para bytes.

Entonces, usaré vector<u_char>, pero ¿no quemara mucho la CPU si tengo que ir metiendo byte a byte dentro del vector con push_back()?

Imagina que son 3 megas, habría 3000000 de push_back() copiando byte a byte dentro del vector, además vector<> tenía un límite de miembros máximo, y creo que se podría susperar en casos como este.

Edito: El maximo del vector depende del tipo tiene sentido: En este caso puede llegar a almacenar: 42949672951 bytes. Unos 42 gigas XDDD.

Para escribir los bytes usare ofstream simplemente, el problema sería al leerlos habría que almacenarlos en un vector<> de bytes, con ifstream y luego ya una vez tenga el vector correcto aplico funciones como find() etc.
« Última modificación: 18 Octubre 2015, 21:11 pm por Kaxperday » En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Clase contenedora de bytes
« Respuesta #3 en: 18 Octubre 2015, 21:15 pm »

El límite de vector depende, pero suele llegar a la giga. 3 MB es poco.
¿Quemar la CPU por llenar un vector de 3 MB? ._.
No infravalores una computadora xD

De todos modos, tienes varias formas de llenarlo. Lo mejor es que no empieces elemento a elemento. Primero, puedes usar vector::reserve para reservar la memoria inicial que requieras (evidentemente tener que copiar el vector constantemente al meter elementos es muy ineficiente).

También puedes usar vector::resize. Se diferencia de reserve en que este realmente cambia el tamaño del vector, no solo de su memoria.

Si has hecho resize, en evz de push_back, puedes usar iteradores o índices para rellenarlo.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Clase contenedora de bytes
« Respuesta #4 en: 18 Octubre 2015, 22:12 pm »

Según vector.max_size(), puede llegar a almacenar 42,949672951 GBytes, otra cosa es que haya memoria en el ordenador para que eso sea posible XD.

El problema será en que no como leer con ifstream y meterlo en un vector al momento, con iteradores como dices, si sabia de resize(), la idea sería hacer resize y leer elemento a elemento del archivo y meterlo dentro del vector?, pero es muy ineficiente, ¿qué habría mejor?.

Ahora busco un poco como sería, la mejor manera entonces es ¿leer todo el contenido del archivo, meterlo en un vector<u_char>?

O igual se me está yendo mucho la olla y era mejor u_char* array= new u_char[tamaño]();

Saludos.
En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Clase contenedora de bytes
« Respuesta #5 en: 18 Octubre 2015, 22:30 pm »

Como digo, leer 3 MB no es nada. Lo más lento es la lectura del archivo, para lo cual debes usar un array.
En difinitiva, buena parte de las opciones han sido dadas. Ahora elige la más eficiente para el uso que le vas a dar.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines