Ayuda convirtiendo puntero void a unsigned char y obtener su valor

Iniciado por harry_the_blogger, 5 Octubre 2014, 19:52 PM

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

harry_the_blogger

Hola, amigos. ¿Como les ha ido? Tengo solo algunos conocimientos sobre el lenguaje C (No conozco mucho sobre C++).

Debido a eso tengo el siguiente problema: Tengo un puntero void que quiero convertir a unsigned char y obtener su valor (todo en la misma linea). Sin embargo, no he podido. ¿Será que alguien me puede ayudar?

Este es el codigo que tratado de hacer (Ya sé que ptr no apunta a ningun lado, pero es solo explicativo):



//Intento 1: Al parecer no me da el valor que quiero
void *ptr;
unsigned char temp;
temp = (unsigned char *) &ptr;

//Intento 2: El compilador no lo acepta.
void *ptr
unsigned char temp;
temp = (unsigned char) *ptr;



Ya he buscado por internet, pero no entiendo mucho sobre como hacer lo que expliqué antes. (El tema de los punteros se vuelve un poco enredado. XD).

Se supone que al aplicar * delante de un puntero, él debería devolver su valor. Entonces por qué el compilador no me acepta la segunda opcion???

Gracias a todos de antemano.
Vista mi blog es enriquemesa.blogspot.com

ThePinkPanther

#1
Prueba así ;


#include <stdio.h>

int main()
{

   int x=5;
   void *ptr;
   ptr=&x;
   unsigned char temp;
   temp = *(unsigned char*)ptr;
   printf("Valor :%c \n",temp);
 
}



harry_the_blogger

Cita de: ThePinkPanther en  5 Octubre 2014, 20:04 PM

//Intento 1: Al parecer no me da el valor que quiero
void *ptr;
unsigned char temp;
temp = (unsigned char *) &ptr;


hola, y si pruebas así..


void *ptr;
unsigned char *temp;
temp = (unsigned char *) ptr;



Sobre el intento 2, yo hice algo así y me funciono :


#include <stdio.h>
#include <stdlib.h>

int main()
{

    int x=5;
    void *ptr;
    ptr=&x;
    unsigned char temp;
    temp = *(unsigned char*)ptr;
    printf("Apunte a :%c \n",temp);
   
}




Gracias por ofrecerme tu ayuda, pero lo probé, y en mi caso particular no funciono. La funcion es la siguiente: (La postearé para que si alguna otra persona quiere ayudarme):


int callback(unsigned int event, void *ptr, void *ptr_additional, void *ptr_file){
    unsigned char temp;

    switch (event){
        case event_trash_byte_found_in_code:

            //Aqui hago lo que me dijiste
            temp = (unsigned char *) ptr;
            show_prefixe((FILE *) ptr_file, temp);
            fprintf((FILE *) ptr_file, "(reported by callback!!)\n");
            break;
        case event_instruction_decoded:

            ///Aqui hago lo que me dijiste
            temp = (unsigned char *) ptr_additional;
            fprintf((FILE *) ptr_file, "A instruction found!! 0x%x\n", temp);

            switch(temp){
                case general_opcode_push:
                    fprintf((FILE *) ptr_file, "push exx \n");
                    break;
                case general_opcode_pop:
                    fprintf((FILE *) ptr_file, "pop exx \n");
                    break;
                case general_opcode_inc:
                    fprintf((FILE *) ptr_file, "inc exx \n");
                    break;
                case general_opcode_dec:
                    fprintf((FILE *) ptr_file, "dec exx \n");
                    break;
            }

            break;
        default:
            break;
    }
}


Básicamente es una funcion, que dependiendo según sea un caso u otro, toma una decision. Show_prefixe recibe el byte temp, y lo imprime en un fichero. Creo que sería algo demasiado tedioso leer todo mi codigo (el cual es bastante extenso)

Bueno, gracias por tu ayuda. Lo intentaré nuevamente a haber si fue que seguí mal algun paso de los que me has dado.
Vista mi blog es enriquemesa.blogspot.com

ThePinkPanther

#3

int callback(unsigned int event, void *ptr, void *ptr_additional, void *ptr_file){
   unsigned char temp;

   switch (event){
       case event_trash_byte_found_in_code:

           //Aqui hago lo que me dijiste
           temp = *(unsigned char*) ptr;
           show_prefixe((FILE *) ptr_file, temp);
           fprintf((FILE *) ptr_file, "(reported by callback!!)\n");
           break;
       case event_instruction_decoded:

           ///Aqui hago lo que me dijiste
           temp = *(unsigned char *) ptr_additional;
           fprintf((FILE *) ptr_file, "A instruction found!! 0x%x\n", temp);

           switch(temp){
               case general_opcode_push:
                   fprintf((FILE *) ptr_file, "push exx \n");
                   break;
               case general_opcode_pop:
                   fprintf((FILE *) ptr_file, "pop exx \n");
                   break;
               case general_opcode_inc:
                   fprintf((FILE *) ptr_file, "inc exx \n");
                   break;
               case general_opcode_dec:
                   fprintf((FILE *) ptr_file, "dec exx \n");
                   break;
           }

           break;
       default:
           break;
   }
}


prueba así.

harry_the_blogger

Gracias ThePinkPanther. Me has ayudado a resolver mi problema. Daré este tema por solucionado.
Vista mi blog es enriquemesa.blogspot.com