Título: Imprimir bits de un objeto Publicado por: patilanz en 18 Febrero 2015, 23:44 pm Hola quiero crear una función que recibe un void * y un size en bytes para imprimir desde esta posición los bits. Algo parecido a esto pero con cualquier objeto
Código 15 = 00000000 00000000 00000000 0000111 Lo estoy intentando pero no me sale, alguna pista? Saludos Título: Re: Imprimir bits de un objeto Publicado por: eferion en 19 Febrero 2015, 08:38 am ¿Algo así?
Código
Editado: Después de pensarlo con un pelín más de tranquilidad... no hace falta pasar el size... basta con usar un template. Eso sí, debidamente especializado para poder manejar tanto punteros como referencias Código
Título: Re: Imprimir bits de un objeto Publicado por: patilanz en 19 Febrero 2015, 17:07 pm Era justo lo que quería. A partir de tu función hice esto:
Código
Porque utilizas reinterpret_cast y remove pointer ? Funciona igual con una conversión normal. Al imprimir los bits con la función printBytes para la variable "t" me imprimie esto: 00000010 10110000 11000000 00000000 1 byte = __int8 t8 3 y 4 bytes = __int16 t16 Que pasa con el byte 2 ?? Lo tiene cada clase que creo pero no se que contiene. Si la clase tiene algún puntero que apunta a un array creado con new al imprimir no se mostrara, cierto ? Solo aparecerá la dirección de memoria Gracias Título: Re: Imprimir bits de un objeto Publicado por: eferion en 19 Febrero 2015, 17:37 pm Utilizo reinterpret_cast porque detesto los cast a la usanza de C "int valor = (int)X;" y la conversión entre los dos tipos no tiene por qué ser compatible. En este caso, con reinterpret_cast le estoy diciendo al compilador algo del estilo "tranquilo que se lo que me hago, esta conversión es legal aunque no lo parezca".
remove_pointer es un template de type_trait y lo que hace es eliminar el puntero de la declaración del tipo. sizeof( T* ) va a devolver, normalmente, 4, ya que un puntero ocupa 4 bytes, sin embargo yo quiero calcular sizeof( T ). Y para hacer este último cálculo necesito eliminar el puntero de la declaración. En cuanto al segundo byte, puede ser alineamiento provocado por tu compilador. Piensa que en una arquitectura de 32 bits, el procesador optimiza para que los datos entren en estos 32 bits, que es el tamaño normal con el que trabaja... si tu usas únicamente 24 bits, el compilador puede decidir desperdiciar los otros 8 para que el alineamiento sea perfecto. Título: Re: Imprimir bits de un objeto Publicado por: patilanz en 19 Febrero 2015, 23:26 pm A mi con sizeof(*T) me devolvía el size correcto. Si agregaba elementos para llegar a mas de 200 bytes sin usar remove_pointer se conseguía. Aunque no lo probé con referencias, ahora lo miro.
Si se usa una arquitectura de 64 bits si uso 24 bits si el compilador lo decide se perderían 40 o en los 64 funciona de otra forma ? Lo demás me quedo claro gracias. Título: Re: Imprimir bits de un objeto Publicado por: eferion en 20 Febrero 2015, 07:43 am Si la arquitectura es de 64 bits, entonces 64 bits es la unidad mínima de datos, luego lo normal es que la memoria consumida por cualquier programa sea múltiplo de 64 bits
|