123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*******************************************************
- * File name: pando_endian.c
- * Author: LIJIAN
- * Versions: 0.1
- * Description: APIs to change endian between net and host machine.
- Net is big endian, host endian depends machine.
- * History:
- * 1.Date:
- * Author:
- * Modification:
- *********************************************************/
- #include "pando_endian.h"
- int little_endian = -1;
- int FUNCTION_ATTRIBUTE is_little_endian()
- {
- if(little_endian == -1)
- {
- union int_char
- {
- int i;
- char c;
- }x;
- x.i = 1;
- little_endian = x.c;
- }
- return little_endian;
- }
- uint16_t FUNCTION_ATTRIBUTE net16_to_host(uint16_t A)
- {
- if(is_little_endian())
- {
- return ((((A) & 0xff00) >> 8) | (((A) & 0x00ff) << 8));
- }
- else
- {
- return A;
- }
- }
- uint32_t FUNCTION_ATTRIBUTE net32_to_host(uint32_t A)
- {
- if(is_little_endian())
- {
- return ((((A) & 0xff000000) >> 24) | \
- (((A) & 0x00ff0000) >> 8 ) | \
- (((A) & 0x0000ff00) << 8 ) | \
- (((A) & 0x000000ff) << 24));
- }
- else
- {
- return A;
- }
- }
- uint64_t FUNCTION_ATTRIBUTE net64_to_host(uint64_t A)
- {
- uint64_t mask = 0xff;
- if(is_little_endian())
- {
- return ((((A) & (mask << 56)) >> 56) | \
- (((A) & (mask << 48)) >> 40) | \
- (((A) & (mask << 40)) >> 24) | \
- (((A) & (mask << 32)) >> 8) | \
- (((A) & (mask << 24)) << 8) | \
- (((A) & (mask << 16)) << 24) | \
- (((A) & (mask << 8)) << 40) | \
- (((A) & (mask)) << 56));
- }
- else
- {
- return A;
- }
- }
- float FUNCTION_ATTRIBUTE net32f_to_host(float A)
- {
- if(is_little_endian())
- {
- union float_int
- {
- float f;
- uint32_t i;
- }x;
- x.f = A;
- x.i = net32_to_host(x.i);
- return x.f;
- }
- else
- {
- return A;
- }
- }
- double FUNCTION_ATTRIBUTE net64f_to_host(double A)
- {
- if(is_little_endian())
- {
- union double_uint64
- {
- double d;
- uint64_t i;
- }x;
- x.d = A;
- x.i = net64_to_host(x.i);
- return x.d;
- }
- else
- {
- return A;
- }
- }
|