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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda convirtiendo puntero void a unsigned char y obtener su valor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda convirtiendo puntero void a unsigned char y obtener su valor  (Leído 1,840 veces)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Ayuda convirtiendo puntero void a unsigned char y obtener su valor
« en: 5 Octubre 2014, 19:52 pm »

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):

Código
  1.  
  2. //Intento 1: Al parecer no me da el valor que quiero
  3. void *ptr;
  4. unsigned char temp;
  5. temp = (unsigned char *) &ptr;
  6.  
  7. //Intento 2: El compilador no lo acepta.
  8. void *ptr
  9. unsigned char temp;
  10. temp = (unsigned char) *ptr;
  11.  
  12.  

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.


En línea

Vista mi blog es enriquemesa.blogspot.com
ThePinkPanther

Desconectado Desconectado

Mensajes: 82



Ver Perfil
Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
« Respuesta #1 en: 5 Octubre 2014, 20:04 pm »

Prueba así ;

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6.    int x=5;
  7.    void *ptr;
  8.    ptr=&x;
  9.    unsigned char temp;
  10.    temp = *(unsigned char*)ptr;
  11.    printf("Valor :%c \n",temp);
  12.  
  13. }
  14.  
  15.  


« Última modificación: 5 Octubre 2014, 20:24 pm por ThePinkPanther » En línea

harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
« Respuesta #2 en: 5 Octubre 2014, 20:21 pm »

Código
  1. //Intento 1: Al parecer no me da el valor que quiero
  2. void *ptr;
  3. unsigned char temp;
  4. temp = (unsigned char *) &ptr;
  5.  

hola, y si pruebas así..

Código
  1. void *ptr;
  2. unsigned char *temp;
  3. temp = (unsigned char *) ptr;
  4.  


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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  
  7.    int x=5;
  8.    void *ptr;
  9.    ptr=&x;
  10.    unsigned char temp;
  11.    temp = *(unsigned char*)ptr;
  12.    printf("Apunte a :%c \n",temp);
  13.  
  14. }
  15.  
  16.  


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):

Código
  1. int callback(unsigned int event, void *ptr, void *ptr_additional, void *ptr_file){
  2.    unsigned char temp;
  3.  
  4.    switch (event){
  5.        case event_trash_byte_found_in_code:
  6.  
  7.            //Aqui hago lo que me dijiste
  8.            temp = (unsigned char *) ptr;
  9.            show_prefixe((FILE *) ptr_file, temp);
  10.            fprintf((FILE *) ptr_file, "(reported by callback!!)\n");
  11.            break;
  12.        case event_instruction_decoded:
  13.  
  14.            ///Aqui hago lo que me dijiste
  15.            temp = (unsigned char *) ptr_additional;
  16.            fprintf((FILE *) ptr_file, "A instruction found!! 0x%x\n", temp);
  17.  
  18.            switch(temp){
  19.                case general_opcode_push:
  20.                    fprintf((FILE *) ptr_file, "push exx \n");
  21.                    break;
  22.                case general_opcode_pop:
  23.                    fprintf((FILE *) ptr_file, "pop exx \n");
  24.                    break;
  25.                case general_opcode_inc:
  26.                    fprintf((FILE *) ptr_file, "inc exx \n");
  27.                    break;
  28.                case general_opcode_dec:
  29.                    fprintf((FILE *) ptr_file, "dec exx \n");
  30.                    break;
  31.            }
  32.  
  33.            break;
  34.        default:
  35.            break;
  36.    }
  37. }
  38.  

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.
En línea

Vista mi blog es enriquemesa.blogspot.com
ThePinkPanther

Desconectado Desconectado

Mensajes: 82



Ver Perfil
Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
« Respuesta #3 en: 5 Octubre 2014, 20:28 pm »

Código
  1. int callback(unsigned int event, void *ptr, void *ptr_additional, void *ptr_file){
  2.    unsigned char temp;
  3.  
  4.    switch (event){
  5.        case event_trash_byte_found_in_code:
  6.  
  7.            //Aqui hago lo que me dijiste
  8.            temp = *(unsigned char*) ptr;
  9.            show_prefixe((FILE *) ptr_file, temp);
  10.            fprintf((FILE *) ptr_file, "(reported by callback!!)\n");
  11.            break;
  12.        case event_instruction_decoded:
  13.  
  14.            ///Aqui hago lo que me dijiste
  15.            temp = *(unsigned char *) ptr_additional;
  16.            fprintf((FILE *) ptr_file, "A instruction found!! 0x%x\n", temp);
  17.  
  18.            switch(temp){
  19.                case general_opcode_push:
  20.                    fprintf((FILE *) ptr_file, "push exx \n");
  21.                    break;
  22.                case general_opcode_pop:
  23.                    fprintf((FILE *) ptr_file, "pop exx \n");
  24.                    break;
  25.                case general_opcode_inc:
  26.                    fprintf((FILE *) ptr_file, "inc exx \n");
  27.                    break;
  28.                case general_opcode_dec:
  29.                    fprintf((FILE *) ptr_file, "dec exx \n");
  30.                    break;
  31.            }
  32.  
  33.            break;
  34.        default:
  35.            break;
  36.    }
  37. }
  38.  

prueba así.
« Última modificación: 5 Octubre 2014, 20:31 pm por ThePinkPanther » En línea

harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
« Respuesta #4 en: 5 Octubre 2014, 21:40 pm »

Gracias ThePinkPanther. Me has ayudado a resolver mi problema. Daré este tema por solucionado.
En línea

Vista mi blog es enriquemesa.blogspot.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda doble puntero char a matriz de char
Programación C/C++
neo_from_cs_matrix 3 4,987 Último mensaje 5 Septiembre 2011, 03:53 am
por rir3760
[AYUDA] Cómo puedo concatenar un char a un puntero de chars?
Programación C/C++
papita5 8 4,849 Último mensaje 19 Octubre 2011, 20:39 pm
por papita5
Estructura ARP a buffer unsigned char *
Programación C/C++
ahkbar87 3 2,108 Último mensaje 3 Febrero 2012, 01:44 am
por ahkbar87
Problema conversión Unsigned char a char
Programación C/C++
juliodiez 4 1,626 Último mensaje 19 Enero 2013, 04:34 am
por juliodiez
Ayuda por favor! Con c, unsigned char y array de char !
Programación C/C++
Yurasamai 1 1,175 Último mensaje 24 Noviembre 2015, 09:14 am
por avesudra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines