Pular para o conteúdo

A ordem dos bytes

Big-endian, little-endian, a ordem da rede, e o bswap — com o mesmo número lido dos dois jeitos.

O número 0x12345678 ocupa quatro bytes, e há duas ordens para escrevê-los: o byte mais significativo primeiro (big-endian, 12 34 56 78) ou o menos significativo primeiro (little-endian, 78 56 34 12). Os processadores x86 e ARM usam little; os protocolos de rede e a maioria dos formatos de arquivo, big — por isso "rede" é o padrão aqui.

dataforge
adopt Arcane.Estrutura as Est
adopt Arcane.Bytes as Bytes

N := Est.definir("N", [["v", "u32"]])                 // "rede" = big-endian
I := Est.definir("I", [["v", "u32"]], "intel")        // little-endian

assert Bytes.hex(N({"v": 0x12345678}).bytes()) is "12345678"
assert Bytes.hex(I({"v": 0x12345678}).bytes()) is "78563412"

// os MESMOS bytes, lidos na ordem errada, são outro número — sem erro nenhum
crus := N({"v": 1}).bytes()
assert I.ler(crus)["v"] is 16777216
assert Est.trocar_ordem(16777216, "u32") is 1
FormatoOrdem
TCP/IP, DNS, PNG, JPEG, Java classbig-endian (rede)
WAV, BMP, ZIP, executável do Windowslittle-endian
TIFFestá no próprio arquivo (II ou MM)
Protocol Buffersvarint — não tem ordem de palavra: ver Varint