00001 #ifndef _TOARRAY_H__
00002 #define _TOARRAY_H__
00003
00004 #include <cstddef>
00005
00010 template <typename T>
00011 static void toArray(T d, char *array) {
00012
00013 for (size_t i = 0; i < sizeof(T); ++i) {
00014 array[sizeof(T) - 1 - i] = (char)(unsigned char)d;
00015 d >>= 8;
00016 }
00017 }
00018
00019 template <typename T>
00020 static T fromArray( const char *array) {
00021 T d = 0;
00022 for (size_t i = 0; i < sizeof(T); ++i) {
00023 d <<= 8;
00024 d |= (T)(unsigned char)array[i];
00025 }
00026 return d;
00027 }
00028
00029
00030 #if defined(__GNUC__) && defined(__i386)
00031
00032 #include <byteswap.h>
00033
00034 template <>
00035 inline unsigned short fromArray<unsigned short>(const char *array) {
00036 return bswap_16( *(unsigned short *)array );
00037 }
00038
00039 template <>
00040 inline unsigned long fromArray<unsigned long>(const char *array) {
00041 return bswap_32( *(unsigned long *)array );
00042 }
00043
00044 template <>
00045 inline void toArray<unsigned short>(unsigned short v, char *array) {
00046 *(unsigned short *)array = bswap_16(v);
00047 }
00048
00049 template <>
00050 inline void toArray<unsigned long>(unsigned long v, char *array) {
00051 *(unsigned long *)array = bswap_32(v);
00052 }
00053
00054 #endif
00055
00056 #endif //TOARRAY_H__
00057
00058
00059
00060
00061
00062