about Endianness

about Endianness

常在一些程式裏面看到 Endianness ,指的就是資料在記憶體排列的狀況。一般有分 Little-Endian, Big-Endian, Bi-Endian三種。

依照 CPU 設計的不同, 當資料寬度超過一個位元組 (BYTE) 以上時:

  • 低位元組的部份,存放在記憶體的低位址處,稱為 Little-ENDIAN

  • 高位元組的部份放在低位址處,稱為 Big-ENDIAN.

範例 C output on big-endian machines

00000000 66 6f 6f 00 12 34 56 78 62 61 72 00 |foo..4Vxbar.|

0000000c

範例 C output on little-endian machines

00000000 66 6f 6f 00 78 56 34 12 62 61 72 00 |foo.xV4.bar.|

0000000c

注意 12 34 56 78 排列的順序...

一個簡單的轉換範例:

short reverseShort (short s) {

unsigned char c1, c2; if (is_bigendian()) {

return s;

} else {

c1 = s & 255;

c2 = (s >> 8) & 255;

return (c1 < < 8) + c2;

}

}

更多 endian 的說明

http://www.ibm.com/developerworks/aix/library/au-endianc/index.html?ca=drs-

http://www.cs.umass.edu/\~verts/cs32/endian.html

convert from Thomas blog post id 155 old convert log: ./091958/tag%3E2007%2008%20cc)

@2007 @08 @cc

Comments