BCB是怎么对double类型转化十六进制存储的

BCB是如何对double类型转化十六进制存储的
BCB中定义了一个long double。在内存中时以10字节的结构体组成。
BCB:long double d = 10230.0;
BCB内存:struct {dowrd m_1, dword m_2, word m_3} = {0000, 0x9FD80000, 0x400C};

问题就是BCB是如何对double类型转化十六进制存储的。VC的那一套转化在BCB中行不通。我想知道的就是转化过程
------解决思路----------------------
楼主要的是CB中10字节浮点数的内存布局及和字节意义。这个查一下浮点数在电脑中的表示方式就知道了。
CB及VC均是符合IEEE浮点数标准的。

VC中long double 是8字节。 符号位1+指数位11+数据位52 = 64位
CB中long double 是10字节。 符号位1+指数位15+数据位64 = 80位

ANSI只规定long double精度不低于double,即最低为8, 可以为10,12,16,18 由编译器自行实现,并且可能在不同的平台下(X86或MIPS)其实现有所不一样。具体的内存布局还与大小端有关,现在CB可以跨平台编译了,而且BCC32与BCC64是完全不同的编译器,其实现也可能不一样。
 
当然8字节的内存布局与10字节的不同,所以VC那套放在CB中就行不通了。保存内存字节流的方式不能可靠地在不同平台下还原一个浮点数。


------解决思路----------------------
定义一个联合,然后用pringf或者springf输出:

typedef union
{
long double ld;
struct
{
unsigned m_1;
unsigned m_2;
unsigned short m_3;
};
}Extended;

Extended v;
v.ld = 10230.0;
printf("0x%.8X, 0x%.8X, 0x%.4X\n", v.m_1, v.m_2, v.m_3);