| 1 | /* Toggle the 16 bit unsigned integer pointed by *p from little endian to |
| 2 | * big endian */ |
| 3 | void memrev16(void *p) { |
| 4 | unsigned char *x = p, t; |
| 5 | |
| 6 | t = x[0]; |
| 7 | x[0] = x[1]; |
| 8 | x[1] = t; |
| 9 | } |
| 10 | |
| 11 | /* Toggle the 32 bit unsigned integer pointed by *p from little endian to |
| 12 | * big endian */ |
| 13 | void memrev32(void *p) { |
| 14 | unsigned char *x = p, t; |
| 15 | |
| 16 | t = x[0]; |
| 17 | x[0] = x[3]; |
| 18 | x[3] = t; |
| 19 | t = x[1]; |
| 20 | x[1] = x[2]; |
| 21 | x[2] = t; |
| 22 | } |
| 23 | |
| 24 | /* Toggle the 64 bit unsigned integer pointed by *p from little endian to |
| 25 | * big endian */ |
| 26 | void memrev64(void *p) { |
| 27 | unsigned char *x = p, t; |
| 28 | |
| 29 | t = x[0]; |
| 30 | x[0] = x[7]; |
| 31 | x[7] = t; |
| 32 | t = x[1]; |
| 33 | x[1] = x[6]; |
| 34 | x[6] = t; |
| 35 | t = x[2]; |
| 36 | x[2] = x[5]; |
| 37 | x[5] = t; |
| 38 | t = x[3]; |
| 39 | x[3] = x[4]; |
| 40 | x[4] = t; |
| 41 | } |
| 42 | |
| 43 | #ifdef TESTMAIN |
| 44 | #include <stdio.h> |
| 45 | |
| 46 | int main(void) { |
| 47 | char buf[32]; |
| 48 | |
| 49 | sprintf(buf,"ciaoroma"); |
| 50 | memrev16(buf); |
| 51 | printf("%s\n", buf); |
| 52 | |
| 53 | sprintf(buf,"ciaoroma"); |
| 54 | memrev32(buf); |
| 55 | printf("%s\n", buf); |
| 56 | |
| 57 | sprintf(buf,"ciaoroma"); |
| 58 | memrev64(buf); |
| 59 | printf("%s\n", buf); |
| 60 | |
| 61 | return 0; |
| 62 | } |
| 63 | #endif |