-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathlittle_big_endian.format.txt
75 lines (69 loc) · 3.96 KB
/
little_big_endian.format.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
┏━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LITTLE_BIG_ENDIAN ┃
┗━━━━━━━━━━━━━━━━━━━━━━━┛
ENDIANNESS ==> #Ordre de lecture/écriture, sur une architecture
#données des groupes de plusieurs octets.
#Peut être appelé gros-boutisme et petit-boutisme en
#français.
#
#Little endian est de droite à gauche.
#Big endian est de gauche à droite.
#
#Ainsi, sur une architecture 16 bits (1 word = 2 octets)
#les quatre octets b0 46 ff 04, si regroupés en deux
#words, seront lus et écrits :
# - 46b0 04ff en little endian
# - b046 ff04 en big endian
#Et sur une architecture 32 bits :
# - 04ff46b0 en little endian
# - b046ff04 en big endian
#L'endianness est en général au niveau des octets
#seulement, mais elle peut parfois descendre au niveau
#du bit, notamment :
# - pour certains protocoles, comme USB
#
#x86, Alpha sont little endian
#PowerPC est historiquement big endian.
#La plupart des processeurs actuels et à venir sont bi-
#endians. Ils peuvent de manière logicielle changer
#leur endianess. Exemple : IA-64, ARM, PowerPC
#(dernières versions), Alpha, SPARC (depuis la V9)
#
#OS Little-endians :
# - Linux (x86, x64, Alpha, IA_64)
# - Windows (x86, x64, IA_64)
# - Max OS X (x86, x64)
# - Solaris (x64, x64, PowerPC)
# - OpenVMS (VAX, Alpha, IA_64)
#OS Big-endians :
# - XBox 360, PS3, Wii
# - Max OS X (PowerPC)
# - Linux (MIPS, SPARC, PA-RISC, PowerPC, ESA/390)
# - HP-UX (PA-RISC, IA_64)
# - Solaris (SPARC)
# - AIX (PowerPC)
# - AmigaOS (PowerPC)
DANGER ==> #Quand on manipule les octets d'un TYPE donné (simple
#ou complexe) et non ce TYPE en entier. Exemple
#fréquent :
# - struct, union et bitfields
# - arrays dynamiques où l'on utilise l'arithmérique
# des pointeurs pour aller en-deça du type des data
# écrites (souvent au niveau de l'octet)
PAS DANGER ==> #Ne pas s'en soucier :
# - pour les strings (C travaille char par char et non
# au niveau de la string entière)
# - pour les bitwise opérations sur un TYPE donné.
DETECTER ==> #Exemple :
# - #include <limits.h>
#
# #if CHAR_BIT != 8
# #error "unsupported char size"
# #endif
#
# const signed int My_Byte = 0xffef;
# #define BIG_ENDIA ( *(signed char*)&My_Byte ==
# 0xff )
CHANGER L'ENDIANNESS ==># - C : Utiliser des bitwise opérations pour renverser
# manuellement les octets
# - ASM : xchg et bswap