I'll try your code in VS 2005. I see the double is 8 bytes in DEV C++. In FASM the memory dump at 'p' will be this one:
;
; Value 46.0 as 8 bytes double
;
00 00 00 00 00 00 47 40
Try to dump it like this:
double a = 46.0;
unsigned char* p = (unsigned char*) &a;
char s [32];
char* pdump = s;
for (int i=0; i<8; i++)
{
wsprintfA (pdump, "%02X ", p[i]);
pdump += 3;
}
// At this point look on buffer 's' in debugger