Autor
|
Tema: ayuda paso de byte* a char* (Leído 8,225 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
if (SendARP(destino, origen, MacAddr, &PhyAddrLen) == NO_ERROR) { if (PhyAddrLen) { *mac = (char*)&MacAddr; /*BYTE *bMacAddr = (BYTE*)&MacAddr; *(mac) = (char*)bMacAddr; for (int i = 0; i < (int)PhyAddrLen; i++) { //printf("%x", bMacAddr[i]); //*(mac[i]) = (char)bMacAddr[i]; }*/ return true; } }
MacAddr es un long que contiene la direccion mac, y necesito esa direccion mac en char*, mac es un char** que recibe de argumento. 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
Mensajes: 3.412
ASMático
|
Pon el error al intentar esa conversión.
|
|
|
En línea
|
|
|
|
crack81
Desconectado
Mensajes: 222
|
Mira este codigo espero te sirva #include <stdio.h> #include <stdio.h> #include <stdlib.h> int main() { char **pDobleOriginal =(char**)malloc(sizeof(char*)*20); unsigned long long int mac=123456789123;//12 valoress no se de cuanto sea la mac char buffer[20]; sprintf(buffer ,"%llu",mac );//convertimos el long long a char *pDobleOriginal=buffer;//copiamos la direccion printf("%s",*pDobleOriginal );//lo mostramos //aqui liberamos la memoria //. //. //. return 0; }
|
|
« Ú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
Mensajes: 702
The man in the Middle
|
Hola gracias por las respuestas, el programa compilaba con éxito, os muestro lo que tengo y la salida: char buffer[20]; sprintf(buffer, "%llu", MacAddr);//convertimos el long long a char *mac = buffer;//copiamos la direccion printf("%s\n", *mac);//lo mostramos static char output[IPTOSBUFFERS][3 * 4 + 3 + 1]; static short which; u_char *p; p = (u_char *)&MacAddr; which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); _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]); printf("%s", output[which]); *mac = output[which]; system("pause"); /*printf("%s", (char*)&MacAddr); *mac = (char*)&MacAddr; BYTE *bMacAddr = (BYTE*)&MacAddr; (mac) = (char*)bMacAddr; for (int i = 0; i < (int)PhyAddrLen; i++) { printf("%x", bMacAddr[i]); *(mac[i]) = (char)bMacAddr[i]; }*/
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 702
The man in the Middle
|
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: /* From tcptraceroute, convert a numeric IP address to a string */ #define IPTOSBUFFERS 12 char *iptos(u_long in) { static char output[IPTOSBUFFERS][3*4+3+1]; static short which; u_char *p; p = (u_char *)∈ which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]); return output[which]; }]
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
Mensajes: 3.412
ASMático
|
BYTE es unsigned char. Con (char*) ha de bastar.
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Eso pensé pero no sé porque no funcionó: BYTE *bMacAddr = (BYTE*)&MacAddr; *(mac) = (char*)bMacAddr; printf("%s\n", *(mac));
La salida es: <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
Mensajes: 3.412
ASMático
|
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.aspxNo 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
Mensajes: 702
The man in the Middle
|
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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Sources Code] RotBits [Byte TO Byte ]
Programación Visual Basic
|
x64core
|
8
|
5,669
|
22 Octubre 2011, 00:46 am
por BlackZeroX
|
|
|
Ayuda en C. Unir char a char[] SOLUCIONADO
Programación C/C++
|
NeoB
|
5
|
5,615
|
10 Abril 2012, 23:07 pm
por NeoB
|
|
|
Variable Char a BYTE
« 1 2 »
Programación C/C++
|
bwsr
|
12
|
6,724
|
23 Febrero 2013, 20:04 pm
por bwsr
|
|
|
Filestream . Byte a Byte
.NET (C#, VB.NET, ASP)
|
blaron
|
3
|
3,243
|
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
|
29 Diciembre 2023, 18:20 pm
por Meta
|
|