Por que a inversão é feita nos dados do Big endian antes de serem armazenados no LE?

0

Pergunta simples, mas confusa para um iniciante.

Suponha que A seja uma máquina BE e esteja enviando 0x44332211 enviando dados para B, que é LE. Por padrão, A usará htonl de 0x44332211, que não é nada além de 0x44332211.

Agora, quando 0x44332211 alcança B, B sabe que é um formato BE, então B irá virar usando a função htonl e alterá-la para 0x11223344.

O que isso significa? Eu li esse conceito da internet. Por que a inversão é necessária antes do armazenamento?

Porque nesse caso o valor invertido 0x11223344 será armazenado em LE como 0x44332211, o que é diferente do que A envia porque B o interpreta de forma diferente, embora pareça igual?

/ * Conversão de BE para LE * /

    
por Subi Suresh 22.04.2013 / 19:22

2 respostas

2

As funções htonl() e ntohl() em uma biblioteca big endian C na verdade não fazem nada (elas são "no-op" s). Desta forma, o mesmo código pode ser usado em máquinas BE e LE; compilado com o C lib na máquina LE, essas funções inverterão os bytes, mas na máquina BE, elas deixarão o mesmo, já que a ordem de bytes da rede é big endian, e o host é big endian já.

Em outras palavras, no seu exemplo, a máquina BE A nunca muda nada. Apenas a máquina de LE B faz.

    
por 22.04.2013 / 19:36
0

Na verdade, a inversão não é necessária antes do armazenamento de uma maneira específica. Isso é necessário porque o host usa a ordem little endian, de modo que quando recebe um número maior que um byte da rede, ele inverte os bytes para interpretar esse número corretamente. É necessário fazer isso antes que os dados sejam usados para qualquer finalidade.

Como uma analogia, imagine-se lendo um mangá impresso da maneira original japonesa (ou seja, a página sendo a última sendo realmente a primeira). Se você não está ciente desse fato e não "vira" o livro, não consegue entender a história.

    
por 22.04.2013 / 19:42

Tags