Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 22 Junio 2015, 15:47 pm



Título: Ayuda con conversión
Publicado por: Kaxperday en 22 Junio 2015, 15:47 pm
Desesperado.

Código
  1. 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
  1. 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
  1. u_char *mac_adaptador = (u_char *)pAdapter->Address;//reinterpret_cast<u_char*>(pAdapter->Address);
  2. u_char *ip_gateway = (u_char *)(byte *)pAdapter->GatewayList.IpAddress.String;
  3. u_char *ip_cliente = (u_char *)pAdapter->IpAddressList.IpAddress.String;
  4. u_char ****** = (u_char *)"192";
  5. printf("***** %x\n", *****[0]);
  6. //c0 a8 01 05 -> 192.168.1.5
  7. for (int i = 0; i < strlen((char *)ip_cliente); i++)
  8. printf("%c", ip_cliente[i]);
  9. printf("\n");
  10.  
  11. for (int i = 0; i < sizeof(ip_cliente); i++)
  12. printf("%x", ip_cliente[i]);
  13. printf("\n");
  14.  
  15. //c0 a8 01 01 -> 192.168.1.1
  16. for (int i = 0; i < strlen((char *)ip_gateway); i++)
  17. printf("%c", ip_gateway[i]);
  18. printf("\n");
  19.  
  20. for (int i = 0; i < strlen((char *)ip_gateway); i++)
  21. printf("%x", ip_gateway[i]);
  22. printf("\n");
  23.  
  24.  
  25. for (int i = 0; i < pAdapter->AddressLength; i++)
  26. printf("%x", mac_adaptador[i]);
  27. 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
  1. int primertermino = atoi("192");
  2. stringstream stream;
  3. stream << hex << primertermino;
  4. string result(stream.str());
  5.  
  6. for (int i = 0; i < 3; i++)
  7. printf("%c", result[i]);
  8. 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
  1. u_char* ipv4_to_hex(char *ip)
  2. {
  3. u_char ip_hex[4];
  4. in_addr addr;
  5. addr.S_un.S_addr = inet_addr(ip);
  6. ip_hex[0] = addr.S_un.S_un_b.s_b1;
  7. ip_hex[1] = addr.S_un.S_un_b.s_b2;
  8. ip_hex[2] = addr.S_un.S_un_b.s_b3;
  9. ip_hex[3] = addr.S_un.S_un_b.s_b4;
  10. return ip_hex;
  11. }