Ayuda con conversión

Iniciado por Kaxperday, 22 Junio 2015, 15:47 PM

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

Kaxperday

Desesperado.

Código (cpp) [Seleccionar]
u_char *mac_adaptador = (u_char *)pAdapter->Address;
Funciona, pasa de binario a hexadeciaml, de byte a u_char (cont char) perfecto.

¿Pero ahora como hago para pasar una string que contiene la ip de la gateway "192.168.1.1" a hexadecimal que sería: "c0 a8 01 01" y meterlo en un u_char?

Código (cpp) [Seleccionar]
u_char *ip_gateway = (u_char *)(byte *)pAdapter->GatewayList.IpAddress.String

Desesperante 50 pestañas y nada.  :o :o :o :o :o

Por no hablar de como obtener el tamaño de los u_char, la verdad nunca los he estudiado y estoy bastante liado.

Edito: Os paso el código con todo lo que tengo:

Código (cpp) [Seleccionar]
u_char *mac_adaptador = (u_char *)pAdapter->Address;//reinterpret_cast<u_char*>(pAdapter->Address);
u_char *ip_gateway = (u_char *)(byte *)pAdapter->GatewayList.IpAddress.String;
u_char *ip_cliente = (u_char *)pAdapter->IpAddressList.IpAddress.String;
u_char ****** = (u_char *)"192";
printf("***** %x\n", *****[0]);
//c0 a8 01 05 -> 192.168.1.5
for (int i = 0; i < strlen((char *)ip_cliente); i++)
printf("%c", ip_cliente[i]);
printf("\n");

for (int i = 0; i < sizeof(ip_cliente); i++)
printf("%x", ip_cliente[i]);
printf("\n");

//c0 a8 01 01 -> 192.168.1.1
for (int i = 0; i < strlen((char *)ip_gateway); i++)
printf("%c", ip_gateway[i]);
printf("\n");

for (int i = 0; i < strlen((char *)ip_gateway); i++)
printf("%x", ip_gateway[i]);
printf("\n");


for (int i = 0; i < pAdapter->AddressLength; i++)
printf("%x", mac_adaptador[i]);
printf("\n");


***** 31
192.168.1.5
3139322e
192.168.1.1
3139322e3136382e312e31
7218dbc397da


Salida, compilación sin errores.

Como se puede observar la MAC es correcta, las IPv4 las muestra bien en decimal, pero en hexadecimal la salida no es correcta.

Perdonad, la variable mi.erda sale como **** ;)

Curioso esto funciona:

Código (cpp) [Seleccionar]
int primertermino = atoi("192");
stringstream stream;
stream << hex << primertermino;
string result(stream.str());

for (int i = 0; i < 3; i++)
printf("%c", result[i]);
printf("\n");


Pero lo tengo en char* no en u_char, y tendría que hacerlo para cada numero separado por punto de la ip.

Código (cpp) [Seleccionar]
u_char* ipv4_to_hex(char *ip)
{
u_char ip_hex[4];
in_addr addr;
addr.S_un.S_addr = inet_addr(ip);
ip_hex[0] = addr.S_un.S_un_b.s_b1;
ip_hex[1] = addr.S_un.S_un_b.s_b2;
ip_hex[2] = addr.S_un.S_un_b.s_b3;
ip_hex[3] = addr.S_un.S_un_b.s_b4;
return ip_hex;
}
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.