a) Solo debe preocuparse por la "endianidad" (es decir, byte-swapping) si los datos se crearon en una máquina big-endian y se están procesando en una máquina little-endian, o viceversa. Hay muchas maneras en que esto puede ocurrir, pero aquí hay un par de ejemplos.
- Recibes datos en una máquina con Windows a través de un socket. Windows emplea una arquitectura little-endian mientras que se supone que los datos de la red están en formato big-endian.
- Procesa un archivo de datos que se creó en un sistema con una "endianidad" diferente.
En cualquiera de estos casos, tendrá que cambiar byte todos los números que son más grandes que 1 byte, p., cortos, ints, longs, doubles, etc. Sin embargo, si siempre está tratando con datos de la misma plataforma, los problemas de endian no son importantes.
b) Según su pregunta, parece que tiene un puntero de char y desea extraer los primeros 4 bytes como int y luego tratar con cualquier problema endian. Para hacer la extracción, utilice esto:
int n = *(reinterpret_cast<int *>(myArray)); // where myArray is your data
Obviamente, esto supone miMatriz no es un puntero nulo; de lo contrario, se bloqueará ya que desreferencia el puntero, por lo tanto, emplee un buen esquema de programación defensivo.
Para intercambiar los bytes en Windows, puede usar las funciones ntohs()/ntohl() y/o htons()/htonl() definidas en winsock2.h. O puede escribir algunas rutinas sencillas de hacer esto en C++, por ejemplo:
inline unsigned short swap_16bit(unsigned short us)
{
return (unsigned short)(((us & 0xFF00) >> 8) |
((us & 0x00FF) << 8));
}
inline unsigned long swap_32bit(unsigned long ul)
{
return (unsigned long)(((ul & 0xFF000000) >> 24) |
((ul & 0x00FF0000) >> 8) |
((ul & 0x0000FF00) << 8) |
((ul & 0x000000FF) << 24));
}
Estoy un poco confundido acerca de lo que estás tratando de hacer. ¿Podría escribir algún pseudocódigo, como ejemplo? ¿Estás tratando de analizar enteros de la matriz de caracteres? –
Estoy tratando de encontrar el tamaño de los bytes (int) de una matriz char * e intentando compararlo con un número entero. La fuente de los datos es una máquina diferente. – kal