Dificuldade em entender o endianness

2

Digamos que eu abra um arquivo tiff no emacs e veja o seguinte no modo hexl:

0x08000400

e eu sei que o arquivo é little endian. Isso significa que o número é na verdade 262152 em decimal, ou

0x00040008 

em hexadecimal? Essa conversão para um número decimal seria diferente se fosse 8bit vs 16bit?

    
por Tony Stark 07.09.2009 / 12:11

1 resposta

2

Para valores de 8 bits, o endian-ness não importa. Além disso, a estrutura de dados do campo é importante.

Se você estiver trabalhando com um arquivo little endian como um fluxo de bytes (como mostra aqui),
um valor de 16 bits tem seu byte mais baixo antes de seu byte mais alto. Então, "0x08 0x00" é o valor 8.

Além disso, você já deve saber disso, mas é bom notar. Na página TIFF da Wikipédia ,

Every TIFF begins with a 2-byte indicator of byte order:
"II" for little endian and "MM" for big endian byte ordering.
The next 2 bytes represent the number 42,
selected because this is the binary pattern 101010 and
"for its deep philosophical significance".

The 42-reading depends upon the byte order indicated by the 2-byte indicator.
All words, double words, etc., in the TIFF file are read based per the indicated byte order.

The TIFF 6.0 specification says that compliant TIFF readers must support both byte orders (II and MM), however, TIFF writers may choose the byte order convenient for their image. This gave rise to the image-processing community's joke that TIFF is an acronym for Thousands of Incompatible File Formats.

    
por 07.09.2009 / 12:33

Tags