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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda paso de byte* a char*
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: ayuda paso de byte* a char*  (Leído 8,225 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
ayuda paso de byte* a char*
« en: 26 Junio 2015, 19:42 pm »

Código
  1. if (SendARP(destino, origen, MacAddr, &PhyAddrLen) == NO_ERROR)
  2. {
  3. if (PhyAddrLen)
  4. {
  5. *mac = (char*)&MacAddr;
  6. /*BYTE *bMacAddr = (BYTE*)&MacAddr;
  7. *(mac) = (char*)bMacAddr;
  8. for (int i = 0; i < (int)PhyAddrLen; i++)
  9. {
  10. //printf("%x", bMacAddr[i]);
  11. //*(mac[i]) = (char)bMacAddr[i];
  12. }*/
  13. return true;
  14. }
  15. }

MacAddr es un long que contiene la direccion mac, y necesito esa direccion mac en char*, mac es un char** que recibe de argumento.

Código:
*mac = (char*)&MacAddr;

No funciona, ¿que puedo hacer para el cambio?.

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: ayuda paso de byte* a char*
« Respuesta #1 en: 26 Junio 2015, 20:34 pm »

Pon el error al intentar esa conversión.


En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: ayuda paso de byte* a char*
« Respuesta #2 en: 26 Junio 2015, 21:01 pm »

Mira este codigo espero te sirva

Código
  1. #include <stdio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7.  
  8.    char **pDobleOriginal=(char**)malloc(sizeof(char*)*20);
  9.    unsigned long long int mac=123456789123;//12 valoress no se de cuanto sea la mac
  10.  
  11.    char buffer[20];
  12.    sprintf(buffer,"%llu",mac);//convertimos el long long a char
  13.    *pDobleOriginal=buffer;//copiamos la direccion
  14.  
  15.    printf("%s",*pDobleOriginal);//lo mostramos
  16.  
  17.    //aqui liberamos la memoria
  18.    //.
  19.    //.
  20.    //.
  21.    getchar();
  22.    return 0;
  23. }
  24.  
  25.  
« Última modificación: 26 Junio 2015, 21:04 pm por crack81 » En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ayuda paso de byte* a char*
« Respuesta #3 en: 26 Junio 2015, 21:27 pm »

Hola gracias por las respuestas, el programa compilaba con éxito, os muestro lo que tengo y la salida:

Código
  1. char buffer[20];
  2. sprintf(buffer, "%llu", MacAddr);//convertimos el long long a char
  3. *mac = buffer;//copiamos la direccion
  4.  
  5. printf("%s\n", *mac);//lo mostramos
  6.  
  7. static char output[IPTOSBUFFERS][3 * 4 + 3 + 1];
  8. static short which;
  9. u_char *p;
  10.  
  11. p = (u_char *)&MacAddr;
  12. which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
  13. _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]), "%d%d%d%d%d%d", p[0], p[1], p[2], p[3], p[4], p[5]);
  14. printf("%s", output[which]);
  15. *mac = output[which];
  16. system("pause");
  17. /*printf("%s", (char*)&MacAddr);
  18. *mac = (char*)&MacAddr;
  19. BYTE *bMacAddr = (BYTE*)&MacAddr;
  20. (mac) = (char*)bMacAddr;
  21. for (int i = 0; i < (int)PhyAddrLen; i++)
  22. {
  23. printf("%x", bMacAddr[i]);
  24. *(mac[i]) = (char)bMacAddr[i];
  25. }*/

Citar
8434662936278192
6071175415229

No obtengo nada, ahora estoy mirando la funcion iptos.

Saludos, sigo en ello.
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: ayuda paso de byte* a char*
« Respuesta #4 en: 26 Junio 2015, 22:14 pm »

No funciona, ¿que puedo hacer para el cambio?.

Si dices que no funciona pero compila, ¿cual era entonces el problema?

¿Qué es "which", y dónde lo inicializas?
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ayuda paso de byte* a char*
« Respuesta #5 en: 26 Junio 2015, 22:21 pm »

Línea 8, es de un código que saqué de esta función de la winpcap, aún no se que hace exactamente pero creo que ahí está la clave para hacer la conversión:

Código
  1. /* From tcptraceroute, convert a numeric IP address to a string */
  2. #define IPTOSBUFFERS    12
  3. char *iptos(u_long in)
  4. {
  5.    static char output[IPTOSBUFFERS][3*4+3+1];
  6.    static short which;
  7.    u_char *p;
  8.  
  9.    p = (u_char *)&in;
  10.    which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
  11.    _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
  12.    return output[which];
  13. }]


Pero tampoco funciona, ¿que puedo hacer?, dejando de lado errores (que no sale ninguno), ¿no se puede pasar de Byte* a Char* de alguna manera?, esa es la pregunta de este hilo, y el código que he subido un intento de implementación fallido, si seguimos buscando errores en él no llegaremos a ninguna parte.

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: ayuda paso de byte* a char*
« Respuesta #6 en: 26 Junio 2015, 22:24 pm »

BYTE es unsigned char. Con (char*) ha de bastar.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ayuda paso de byte* a char*
« Respuesta #7 en: 26 Junio 2015, 22:40 pm »

Eso pensé pero no sé porque no funcionó:

Código
  1. BYTE *bMacAddr = (BYTE*)&MacAddr;
  2. *(mac) = (char*)bMacAddr;
  3. printf("%s\n", *(mac));

La salida es:

Código:
<G◄6ÿ↔╠╠╠╠╠╠╠╠╠╠☻☻☻☻WinSock 2.0

Paso MacAddr que es U_LONG[2] a una cadena de bytes, que se almacena en bMacAddr, luegoesa cadena de Bytes trato de convertirla a una cadena Char*, pero al mostrar la salida sale basura, notar que al mostrar los bytes de bMacAddr en un for, la salida es correcta, mostrando la Mac.

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: ayuda paso de byte* a char*
« Respuesta #8 en: 26 Junio 2015, 22:45 pm »

No es basura. La cadena son los bytes que componen la MAC. Está en binario.
Tendrás que hacer un for para imprimir por pantalla uno a uno. (int)bMacAddr[ x ], o (int)(*mac)[ x ].

EDITO: En la documentación hay un ejemplo donde utiliza el for: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366358%28v=vs.85%29.aspx

No olvides mirar la documentación de las funciones. Aprobecha que MSDN documenta casi todo, si no todo.
« Última modificación: 26 Junio 2015, 23:15 pm por ivancea96 » En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ayuda paso de byte* a char*
« Respuesta #9 en: 26 Junio 2015, 23:12 pm »

Evidentemente ya busqué documentación incluyendo en MSDN.

Incluso ese mismo link, que para nada resuelve la duda, puesto que lo que hace es mostrar los bytes de la MAC usando un for, ya dije anteriormente que eso lo hacía sin problemas, y que el problema y duda por la que creé el hilo es porque quiero pasar de U_LONG a char* o string, no quiero mostrar Bytes por pantalla.

Dudo que la basura contenga los bytes de la MAC, puesto que "WinSock 2.0" no creo que tenga mucho que ver en ello.

Saludos.
« Última modificación: 26 Junio 2015, 23:14 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.
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Sources Code] RotBits [Byte TO Byte ]
Programación Visual Basic
x64core 8 5,669 Último mensaje 22 Octubre 2011, 00:46 am
por BlackZeroX
Ayuda en C. Unir char a char[] SOLUCIONADO
Programación C/C++
NeoB 5 5,615 Último mensaje 10 Abril 2012, 23:07 pm
por NeoB
Variable Char a BYTE « 1 2 »
Programación C/C++
bwsr 12 6,724 Último mensaje 23 Febrero 2013, 20:04 pm
por bwsr
Filestream . Byte a Byte
.NET (C#, VB.NET, ASP)
blaron 3 3,243 Último mensaje 5 Abril 2014, 02:01 am
por Eleкtro
Error en este código: no se puede convertir de 'byte[]' a 'char[]'
.NET (C#, VB.NET, ASP)
Meta 5 5,782 Último mensaje 29 Diciembre 2023, 18:20 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines