Código
Funciona, pasa de binario a hexadeciaml, de byte a u_char (cont char) perfecto.
u_char *mac_adaptador = (u_char *)pAdapter->Address;
¿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
u_char *ip_gateway = (u_char *)(byte *)pAdapter->GatewayList.IpAddress.String
Desesperante 50 pestañas y nada.
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
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");
Código:
***** 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
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
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; }