It really isn't necessary to convert a double (AFAIK endianness just affects integers), but if you just want a generic solution:
Code:
void reverse_bytes( void* data, size_t size )
{
if( size )
for
(
unsigned char
temp,
* base = ( unsigned char* )data,
* limit = ( base + size ) - 1;
base < limit;
++base, --limit
)
{
temp = *base;
*base = *limit;
*limit = temp;
}
}
int impl_is_little_endian_( void )
{
static size_t
value = 1,
test = *( ( unsigned char* )&value ) == 1;
return test;
}
void to_little_endian( void* data, size_t size )
{
if( !impl_is_little_endian_( ) )
reverse_bytes( data, size );
}
void to_big_endian( void* data, size_t size )
{
if( impl_is_little_endian_( ) )
reverse_bytes( data, size );
}
// Example:
int main( void )
{
double
value = exp( 1.0 );
to_big_endian( &value, sizeof( value ) );
}
EDIT: And just FYI, I didn't compile or test the code, so it may have errors/bugs...