ayuda paso de byte* a char*

Iniciado por Kaxperday, 26 Junio 2015, 19:42 PM

0 Miembros y 2 Visitantes están viendo este tema.

ivancea96

Cita de: Kaxperday en 26 Junio 2015, 23:12 PM
Dudo que la basura contenga los bytes de la MAC, puesto que "WinSock 2.0" no creo que tenga mucho que ver en ello.

printf() lee hasta un un byte nulo.bMacAddr no tiene byte nulo, así que sigue leyendo en memoria hasta un byte nulo.

Kaxperday

Pero imprimir ints por pantalla no me hará conseguir la cadena char*.
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

En ese caso, utiliza sprintf().

Kaxperday

#13
Imposible:

Código (cpp) [Seleccionar]
BYTE *bMacAddr = (BYTE*)&MacAddr;
for (int i = 0; i < (int)PhyAddrLen; i++)
printf("%x", bMacAddr[i]);
//*(mac) = (char*)bMacAddr;
//printf("\n%s\n", (int)*(mac));

//const int n = sprintf(NULL, 0, "%lu", MacAddr);
char buf[30];
sprintf(buf, "\n%s", MacAddr);
printf("\n%s\n", buf);


Ya lo probé antes y tampoco funciona, no hay manera he buscado ningún código funciona, al final lo acabaré pasando a u_char* y que lo **.

Edito: Produce error en el sprintf, "stack around the variable buff was corrupted".

Saludos.
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

MacAddr no. Tendrás que interpretar como enteros cada uno de los bytes de MacAddr.

Kaxperday

#15
Código (cpp) [Seleccionar]
BYTE *bMacAddr = (BYTE*)&MacAddr;
//for (int i = 0; i < (int)PhyAddrLen; i++)
// printf("%x", bMacAddr[i]);
//*(mac) = (char*)bMacAddr;
//printf("\n%s\n", (int)*(mac));
char buf[30];
char ok[40]="";


for (int i = 0; i < (int)PhyAddrLen; i++)
printf("%c", (char)(int)bMacAddr[i]);

printf("\n");
for (int i = 0; i < (int)PhyAddrLen; i++)
{
sprintf(buf, "%c", (int)bMacAddr[i]);
printf("%c", buf);
strcat(ok, buf);
}

//sprintf(buf, "%s", MacAddr);
printf("\n%s\n", ok);


No hay manera. 3 intentos 3 veces muestra basura.

Edito: Acabo de probar con _itoa y tampoco funciona, no hay manera.

Saludos.
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

printf("%c", (char)(int)bMacAddr[i]);
para qué ese (char)? Estás haciendo 2 conversiones, una de ellas no sirve de nada.

Prueba con printf("%i", (int)bMacAddr[i]);

Kaxperday

#17
Nada:

Código (cpp) [Seleccionar]
BYTE *bMacAddr = (BYTE*)&MacAddr;
for (int i = 0; i < (int)PhyAddrLen; i++)
{
printf("%i", (int)bMacAddr[i]);
}


Salida:

6071175415229

Lejos de la cadena, mostrando enteros no obtendré un char*. Y para meterlo en sprintf..

Código (cpp) [Seleccionar]
for (int i = 0; i < (int)PhyAddrLen; i++)
{
printf("%i", (int)bMacAddr[i]);
sprintf(buf, "%c", (int)bMacAddr[i]);
printf("%c", buf[0]);
}


Probaré otros métodos.

Gracias de todas formas.
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

#18
Esos son 6 números sin espacios. ¿No es la MAC que buscas?

Citar60:71:175:41:52:29
Claramente, en decimal.

Kaxperday

#19
Con espacios:

60 71 17 54 152 29

La Mac empezaba por 3C. Así hemos pasado los 6 bloques hexadecimales de la Mac a enteros. Si ahora lo que buscabas era pasarlos a chars no creo que funcione.

Esto sí muestra la Mac, pero no obtengo la cadena, no se como llegar a ella:

BYTE *bMacAddr = (BYTE*)&MacAddr;
for (int i = 0; i < (int)PhyAddrLen; i++)
printf("%x", bMacAddr[i]);


Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.