Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Convertir tipos de datos a DWOR y WCHAR

Estas en el tema de Convertir tipos de datos a DWOR y WCHAR en el foro de C/C++ en Foros del Web. tengo dos variables una tipo DWORD y otra tipo WCHAR y quiero asignar a estas variables una variable BYTE[8] Y CHAR[16] respectivamente. ¿Cómo puedo hacer ...
  #1 (permalink)  
Antiguo 12/09/2013, 10:08
 
Fecha de Ingreso: junio-2008
Mensajes: 109
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Convertir tipos de datos a DWOR y WCHAR

tengo dos variables una tipo DWORD y otra tipo WCHAR y quiero asignar a estas variables una variable BYTE[8] Y CHAR[16] respectivamente.
¿Cómo puedo hacer la conversión?
  #2 (permalink)  
Antiguo 15/09/2013, 03:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Convertir tipos de datos a DWOR y WCHAR

Una cosa: BYTE[] y CHAR[] te refieres a arrays de tipos BYTE y CHAR?

En la api de windows se redefinen varios tipos de datos estandar:

Código C:
Ver original
  1. typedef wchar_t WCHAR;
  2. typedef unsigned char BYTE;
  3. typedef unsigned long DWORD;
  4. typedef char CHAR;

Para convertir de char a wchar_t tienes la funcion MultiByteToWideChar http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Pero para convertir BYTE[8] (char[8]) a DWORD (unsigned long) no puedes hacerlo de forma directa. Seguramente ya habras visto que en los mensajes de windows es habitual recibir argumentos de tipo unsigned long (WPARAM, LPARAM, DWORD) formado por dos WORD (unsigned short) en forma de punteros (void *) a otros datos, tal vez sea esto lo que estas buscando.

Saludos
vosk
  #3 (permalink)  
Antiguo 16/09/2013, 13:02
 
Fecha de Ingreso: junio-2008
Mensajes: 109
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Convertir tipos de datos a DWOR y WCHAR

Lo que pasa que según la documentación Adrres es un arreglo de tipo byte:

Address
Type:*BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
The hardware address for the adapter represented as a*BYTE*array.


para recorrer el arreglo de byte hago esto:

Código C++:
Ver original
  1. for(int i = 0; i < pAdapterInfo->AddressLength; i++)
  2.             mac[i] = pAdapterInfo->Address[i];
  3.  
  4.         CopyString(mac, val.mac, 8);
  5.         mbstowcs(val.ip, pAdapterInfo->IpAddressList.IpAddress.String, MAX_PATH);


Al usar CopyString quiero copiar todo el arreglo mac[] pero lo que quiero es convertir a su equivalente hexadecimal y copiarlo como una cadena el arreglo de byte que corresponde a Address lo retorna de la siguiente manenra:

pAdapterInfo->Address[0] //El valor que retorna es 0
pAdapterInfo->Address[1] //valor = 25
pAdapterInfo->Address[2] //valor = 102

según noto estos valores representan la mac pero en valores decimales porque la mac donde hago la prueba es: 00 19 66 c4 bb ca

entonces quiero convertir cada valor a su equivalente en hexadecimal y guardarlo como un cadena.
  #4 (permalink)  
Antiguo 16/09/2013, 15:40
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Convertir tipos de datos a DWOR y WCHAR

Pues eso, obtienes una lista de BYTE que traducido significa que obtienes una lista de unsigned char, como sabemos que unsigned char soporta entre 0 y 255, y que obtienes la mac en decimales solo has de tratar cada unsigned char como entero.


"...entonces quiero convertir cada valor..."

Los valores son los mismos en decimal que en hexadecimal (no puedes convertir un valor a un mismo valor), lo que cambia es la representacion; lo que quieres es representar el entero decimal como hexadecimal; tienes varias formas: la mas simple en tu caso ya que quieres guardarlo como cadena es usar el formateo de texto que provee la funcion sprintf, o lo haces manualmente para cada BYTE o usas un bucle

Código C:
Ver original
  1. char mac_address[18], str[3];
  2. int q;
  3.  
  4. memset(mac_address, 0, sizeof(mac_address));
  5. for(q = 0; q < 6; q++) {
  6.     sprintf(str, "%x", pAdapterInfo->Address[q]);
  7.     if(q) {
  8.         strcat(mac_address, ":");
  9.     }
  10.     strcat(mac_address, str);
  11. }

(nota: en el ejemplo supongo que la direccion mac siempre tendrá 6 valores representados por 2 digitos hexadecimales (12), con un separador entre valores (5), mas un nulo para representarlo como texto (1)).

Saludos
vosk
  #5 (permalink)  
Antiguo 19/09/2013, 09:06
 
Fecha de Ingreso: junio-2008
Mensajes: 109
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Convertir tipos de datos a DWOR y WCHAR

Gracias Vosk me ha servido la información, con esto doy por solucionado el tema, se te agradece.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:09.