此文版权属于作者所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!
有些系统的 double 的 sizeof 不为 8,或者 double 在内存里的表示不是 IEEE 754 格式,在这种系统中,需要按 IEEE 754 的 double 格式传输给其它人时,就需要自己写相应的编码函数了。
下面是按照 IEEE 754 规范,把 double 编码为二进制的代码:
/* IEEE 754 double 编码为二进制 */
void packet754(int64_t integer, /* 整数部分 */
int64_t decimal, /* 小数部分 */
uint16_t bits, /* 32 或 64 */
uint8_t* buf /* 输出缓冲区 */
)
{
/* IEEE 754 double 大序编码 */
assert(bits == 64 || bits == 32);
if (integer == 0 && decimal)
{
*buf++ = 0, *buf+