endianess conversion API, to be applied to specially encoded data types for arch agnostic encoding.
This commit is contained in:
parent
b1a8e3e89e
commit
e12cb14308
63
src/endian.c
Normal file
63
src/endian.c
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/* Toggle the 16 bit unsigned integer pointed by *p from little endian to
|
||||||
|
* big endian */
|
||||||
|
void memrev16(void *p) {
|
||||||
|
unsigned char *x = p, t;
|
||||||
|
|
||||||
|
t = x[0];
|
||||||
|
x[0] = x[1];
|
||||||
|
x[1] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Toggle the 32 bit unsigned integer pointed by *p from little endian to
|
||||||
|
* big endian */
|
||||||
|
void memrev32(void *p) {
|
||||||
|
unsigned char *x = p, t;
|
||||||
|
|
||||||
|
t = x[0];
|
||||||
|
x[0] = x[3];
|
||||||
|
x[3] = t;
|
||||||
|
t = x[1];
|
||||||
|
x[1] = x[2];
|
||||||
|
x[2] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Toggle the 64 bit unsigned integer pointed by *p from little endian to
|
||||||
|
* big endian */
|
||||||
|
void memrev64(void *p) {
|
||||||
|
unsigned char *x = p, t;
|
||||||
|
|
||||||
|
t = x[0];
|
||||||
|
x[0] = x[7];
|
||||||
|
x[7] = t;
|
||||||
|
t = x[1];
|
||||||
|
x[1] = x[6];
|
||||||
|
x[6] = t;
|
||||||
|
t = x[2];
|
||||||
|
x[2] = x[5];
|
||||||
|
x[5] = t;
|
||||||
|
t = x[3];
|
||||||
|
x[3] = x[4];
|
||||||
|
x[4] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef TESTMAIN
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
char buf[32];
|
||||||
|
|
||||||
|
sprintf(buf,"ciaoroma");
|
||||||
|
memrev16(buf);
|
||||||
|
printf("%s\n", buf);
|
||||||
|
|
||||||
|
sprintf(buf,"ciaoroma");
|
||||||
|
memrev32(buf);
|
||||||
|
printf("%s\n", buf);
|
||||||
|
|
||||||
|
sprintf(buf,"ciaoroma");
|
||||||
|
memrev64(buf);
|
||||||
|
printf("%s\n", buf);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
8
src/endian.h
Normal file
8
src/endian.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef __ENDIAN_H
|
||||||
|
#define __ENDIAN_H
|
||||||
|
|
||||||
|
void memrev16(void *p);
|
||||||
|
void memrev32(void *p);
|
||||||
|
void memrev64(void *p);
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user