]> git.saurik.com Git - redis.git/blame - src/endian.c
intset.c endianess fixes.
[redis.git] / src / endian.c
CommitLineData
56538477 1#include <stdint.h>
2
e12cb143 3/* Toggle the 16 bit unsigned integer pointed by *p from little endian to
4 * big endian */
5void memrev16(void *p) {
6 unsigned char *x = p, t;
7
8 t = x[0];
9 x[0] = x[1];
10 x[1] = t;
11}
12
13/* Toggle the 32 bit unsigned integer pointed by *p from little endian to
14 * big endian */
15void memrev32(void *p) {
16 unsigned char *x = p, t;
17
18 t = x[0];
19 x[0] = x[3];
20 x[3] = t;
21 t = x[1];
22 x[1] = x[2];
23 x[2] = t;
24}
25
26/* Toggle the 64 bit unsigned integer pointed by *p from little endian to
27 * big endian */
28void memrev64(void *p) {
29 unsigned char *x = p, t;
30
31 t = x[0];
32 x[0] = x[7];
33 x[7] = t;
34 t = x[1];
35 x[1] = x[6];
36 x[6] = t;
37 t = x[2];
38 x[2] = x[5];
39 x[5] = t;
40 t = x[3];
41 x[3] = x[4];
42 x[4] = t;
43}
44
56538477 45uint16_t intrev16(uint16_t v) {
46 memrev16(&v);
47 return v;
48}
49
50uint32_t intrev32(uint32_t v) {
51 memrev32(&v);
52 return v;
53}
54
55uint64_t intrev64(uint64_t v) {
56 memrev64(&v);
57 return v;
58}
59
e12cb143 60#ifdef TESTMAIN
61#include <stdio.h>
62
63int main(void) {
64 char buf[32];
65
66 sprintf(buf,"ciaoroma");
67 memrev16(buf);
68 printf("%s\n", buf);
69
70 sprintf(buf,"ciaoroma");
71 memrev32(buf);
72 printf("%s\n", buf);
73
74 sprintf(buf,"ciaoroma");
75 memrev64(buf);
76 printf("%s\n", buf);
77
78 return 0;
79}
80#endif