Bytes escritos al reves en archivo

Iniciado por erickgracia, 22 Abril 2016, 18:40 PM

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

erickgracia

Hola a todos, tengo la siguiente duda:


Estoy escribiendo bytes dentro de un archivo de la siguiente manera:


short lenght = 6;

fwrite(&lenght, sizeof(lenght), 1, file);


esperando que el archivo guarde en Hexadecimal los Bytes 0x00 0x06, en ese orden. Sin embargo el archivo de salida sale primero 0x06 y luego el 0x00.

Haciendo este mismo movimiento con variables int =6, me guarda  los bytes en el orden 0x06 0x00 0x00 0x00, o sea, tambien me los manda al reves de lo esperado.



He investigado y tiene que ver con un tema llamado Endianess, (Big Endian, Little Endian), lo cual me pareció interesante, pero aun no me quito la duda de como hacer para que mi programa guarde los bits del modo que yo quiero. Mas que nada con las variables de tamaño short.  Alguna idea? ;D


De antemano, gracias por su tiempo

MAFUS

Con la función htons. Es una función muy usada en la comunicación por internet ya que acomoda la representación interna, sea cual sea la de la máquina a big endian, que es el estándar de internet, y de paso, la representación que necesitas en tu archivo.

erickgracia

Cita de: MAFUS en 22 Abril 2016, 21:34 PM
Con la función htons. Es una función muy usada en la comunicación por internet ya que acomoda la representación interna, sea cual sea la de la máquina a big endian, que es el estándar de internet, y de paso, la representación que necesitas en tu archivo.



Gracias por la respuesta tan pronta ;-), aqui van otras dudas si no es mucha molestia  ;D:

1 *¿En que biblioteca se encuentra la funcion htons? he buscado al respecto y me sale que usa la biblioteca <arpa/inet.h> pero parecia que se refería a linux.

trabajo en Eclipse compilador MinGW32, y me detecta la función, pero me suelen aparecer errores:

        - Function 'htons' could not be resolved
   - 'htons' was not declared in this scope)



2 *tomando en cuenta que dicha función retorna, y tiene como parametro una variable de tipo Uint16_t (o Uint32_t para htonl() ), debería utilizar ese tipo de variable en vez de los acostumbrados int y short y es lo mismo?


Saludos!