Skip to content

Commit 0e476b3

Browse files
endianess conversion
1 parent df8c111 commit 0e476b3

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
CC=gcc
2+
CFLGAS=-Wall
3+
DEPS =
4+
OBJ = endianess
5+
6+
%.o: %.c $(DEPS)
7+
$(CC) -c -o $@ $< $(CFLAGS)
8+
9+
$(OBJ): $(OBJ).o
10+
$(CC) -o $@ $^ $(CFLAGS)
11+
12+
clean:
13+
rm -f $(OBJ) $(OBJ).o
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
## Endianess Conversion
2+
#### Usage
3+
```
4+
make
5+
./endianess
6+
```
7+
8+
### Code
9+
```c
10+
#include <stdio.h>
11+
#include <stdlib.h>
12+
#include <stdint.h>
13+
14+
uint32_t endianess_swap(uint32_t num) {
15+
num = ((num & 0xffff0000) >> 16) | ((num & 0x0000ffff) << 16);
16+
num = ((num & 0xff00ff00) >> 8) | ((num & 0x00ff00ff) << 8);
17+
return num;
18+
}
19+
20+
int main (int argc, char *argv[]) {
21+
22+
uint32_t num = 0x12345678;
23+
uint8_t *n = (uint8_t*) &num;
24+
int i;
25+
26+
for (i = 0; i < sizeof(num); i++) {
27+
printf("%x ", *n++);
28+
}
29+
printf("\n");
30+
31+
uint32_t swap_num = endianess_swap(num);
32+
n = (uint8_t*) &swap_num;
33+
34+
for (i = 0; i < sizeof(swap_num); i++) {
35+
printf("%x ", *n++);
36+
}
37+
printf("\n");
38+
39+
return 0;
40+
}
41+
42+
```
43+
44+
## Reference
45+
46+
https://www.geeksforgeeks.org/little-and-big-endian-mystery/
47+
48+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <stdint.h>
4+
5+
uint32_t endianess_swap(uint32_t num) {
6+
num = ((num & 0xffff0000) >> 16) | ((num & 0x0000ffff) << 16);
7+
num = ((num & 0xff00ff00) >> 8) | ((num & 0x00ff00ff) << 8);
8+
return num;
9+
}
10+
11+
int main (int argc, char *argv[]) {
12+
13+
uint32_t num = 0x12345678;
14+
uint8_t *n = (uint8_t*) &num;
15+
int i;
16+
17+
for (i = 0; i < sizeof(num); i++) {
18+
printf("%x ", *n++);
19+
}
20+
printf("\n");
21+
22+
uint32_t swap_num = endianess_swap(num);
23+
n = (uint8_t*) &swap_num;
24+
25+
for (i = 0; i < sizeof(swap_num); i++) {
26+
printf("%x ", *n++);
27+
}
28+
printf("\n");
29+
30+
return 0;
31+
}

0 commit comments

Comments
 (0)