Originally Posted by
EvilGuru
does anyone known of a smarter method to swap the bytes than this:
Code:
void my_htond (double *out, double in)
{
unsigned char *bin = (unsigned char *) ∈
unsigned char *bot = (unsigned char *) out;
int j;
for (j = 0; j < sizeof(double); j++) bout[j] = bin[(sizeof(double) - 1) - j];
}
This is pretty much the same thing, except done in place -- just for something else to look at.
Code:
#include <stdio.h>
void reverse_bytes(void *object, size_t size)
{
unsigned char *beg, *end;
for ( beg = object, end = beg + size - 1; beg < end; ++beg, --end )
{
unsigned char temp = *beg;
*beg = *end;
*end = temp;
}
}
void show_bytes(const void *object, size_t size)
{
const unsigned char *byte;
for ( byte = object; size--; ++byte )
{
printf("%p : %02X\n", byte, (unsigned)*byte);
}
}
int main(void)
{
double value = 123.456;
puts("a:");
show_bytes(&value, sizeof value);
puts("b:");
reverse_bytes(&value, sizeof value);
show_bytes(&value, sizeof value);
return 0;
}
/*
http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html:
405EDD2F1A9FBE77
*/
/* my output
a:
0012FF84 : 77
0012FF85 : BE
0012FF86 : 9F
0012FF87 : 1A
0012FF88 : 2F
0012FF89 : DD
0012FF8A : 5E
0012FF8B : 40
b:
0012FF84 : 40
0012FF85 : 5E
0012FF86 : DD
0012FF87 : 2F
0012FF88 : 1A
0012FF89 : 9F
0012FF8A : BE
0012FF8B : 77
*/