1 #include "endian.h"
3 /* Write a 64-bit quantity out into memory in BIG ENDIAN order */
4 void write_be64(in, out)
5     unsigned long long in;
6     unsigned char *out;
7 {
8     out = (in >> 56) & 0xFF;
9     out = (in >> 48) & 0xFF;
10     out = (in >> 40) & 0xFF;
11     out = (in >> 32) & 0xFF;
12     out = (in >> 24) & 0xFF;
13     out = (in >> 16) & 0xFF;
14     out = (in >> 8) & 0xFF;
15     out = in & 0xFF;
16 }
18 /* Read in a 64-bit BIG ENDIAN quantity */
19 unsigned long long read_be64(in)
20     unsigned char *in;
21 {
22     unsigned long long result = 0;
24     result |= (unsigned long long)in << 56;
25     result |= (unsigned long long)in << 48;
26     result |= (unsigned long long)in << 40;
27     result |= (unsigned long long)in << 32;
28     result |= (unsigned long long)in << 24;
29     result |= (unsigned long long)in << 16;
30     result |= (unsigned long long)in << 8;
31     result |= (unsigned long long)in;
33     return result;
34 }
36 /* Write a 64-bit quantity out into memory in LITTLE ENDIAN order */
37 void write_le64(in, out)
38     unsigned long long in;
39     unsigned char *out;
40 {
41     out = in & 0xFF;
42     out = (in >> 8) & 0xFF;
43     out = (in >> 16) & 0xFF;
44     out = (in >> 24) & 0xFF;
45     out = (in >> 32) & 0xFF;
46     out = (in >> 40) & 0xFF;
47     out = (in >> 48) & 0xFF;
48     out = (in >> 56) & 0xFF;
49 }
51 /* Read in a 64-bit LITTLE ENDIAN quantity */
52 unsigned long long read_le64(in)
53     unsigned char *in;
54 {
55     unsigned long long result = 0;
57     result |= (unsigned long long)in;
58     result |= (unsigned long long)in << 8;
59     result |= (unsigned long long)in << 16;
60     result |= (unsigned long long)in << 24;
61     result |= (unsigned long long)in << 32;
62     result |= (unsigned long long)in << 40;
63     result |= (unsigned long long)in << 48;
64     result |= (unsigned long long)in << 56;
66     return result;
67 }
69 /* Write a 48-bit quantity out into memory in LITTLE ENDIAN order */
70 void write_le48(in, out)
71     unsigned long long in;
72     unsigned char *out;
73 {
74     out = in & 0xFF;
75     out = (in >> 8) & 0xFF;
76     out = (in >> 16) & 0xFF;
77     out = (in >> 24) & 0xFF;
78     out = (in >> 32) & 0xFF;
79     out = (in >> 40) & 0xFF;
80 }
82 /* Read in a 48-bit LITTLE ENDIAN quantity */
83 unsigned long long read_le48(in)
84     unsigned char *in;
85 {
86     unsigned long long result = 0;
88     result |= (unsigned long long)in;
89     result |= (unsigned long long)in << 8;
90     result |= (unsigned long long)in << 16;
91     result |= (unsigned long long)in << 24;
92     result |= (unsigned long long)in << 32;
93     result |= (unsigned long long)in << 40;
95     return result;
96 }
98 /* Write a 32-bit quantity out into memory in BIG ENDIAN order */
99 void write_be32(in, out)
100     unsigned long in;
101     unsigned char *out;
102 {
103     out = (in >> 24) & 0xFF;
104     out = (in >> 16) & 0xFF;
105     out = (in >> 8) & 0xFF;
106     out = in & 0xFF;
107 }
109 /* Read in a 32-bit BIG ENDIAN quantity */
110 unsigned long read_be32(in)
111     unsigned char *in;
112 {
113     unsigned long result = 0;
115     result |= (unsigned long)in << 24;
116     result |= (unsigned long)in << 16;
117     result |= (unsigned long)in << 8;
118     result |= (unsigned long)in;
120     return result;
121 }
123 /* Write a 32-bit quantity out into memory in LITTLE ENDIAN order */
124 void write_le32(in, out)
125     unsigned long in;
126     unsigned char *out;
127 {
128     out = in & 0xFF;
129     out = (in >> 8) & 0xFF;
130     out = (in >> 16) & 0xFF;
131     out = (in >> 24) & 0xFF;
132 }
134 /* Read in a 32-bit LITTLE ENDIAN quantity */
135 unsigned long read_le32(in)
136     unsigned char *in;
137 {
138     unsigned long result = 0;
140     result |= (unsigned long)in;
141     result |= (unsigned long)in << 8;
142     result |= (unsigned long)in << 16;
143     result |= (unsigned long)in << 24;
145     return result;
146 }
148 /* Write a 16-bit quantity out into memory in BIG ENDIAN order */
149 void write_be16(in, out)
150     unsigned short in;
151     unsigned char *out;
152 {
153     out = (in >> 8) & 0xFF;
154     out = in & 0xFF;
155 }
157 /* Read in a 16-bit BIG ENDIAN quantity */
158 unsigned short read_be16(in)
159     unsigned char *in;
160 {
161     unsigned short result = 0;
163     result |= (unsigned short)in << 8;
164     result |= (unsigned short)in;
165     return result;
166 }
168 /* Write a 16-bit quantity out into memory in LITTLE ENDIAN order */
169 void write_le16(in, out)
170     unsigned short in;
171     unsigned char *out;
172 {
173     out = in & 0xFF;
174     out = in & 0xFF >> 8;
175 }
177 /* Read in a 16-bit LITTLE ENDIAN quantity */
178 unsigned short read_le16(in)
179     unsigned char *in;
180 {
181     unsigned short result = 0;
183     result |= (unsigned short)in;
184     result |= (unsigned short)in << 8;
185     return result;
186 }