精度值以intBitsTofloat格式在C中表示

精度值以intBitsTofloat格式在C中表示,c,64-bit,bit-manipulation,C,64 Bit,Bit Manipulation,我有一个双精度值=10.233387434223。我想通过网络传输。 我使用 以下函数 int floatToRawIntBits(float_t x) { union { float_t f; // assuming 32-bit IEEE 754 single-precision int32_t i; // assuming 32-bit 2's complement int } u; u.f = x; return u.i; }

我有一个双精度值=10.233387434223。我想通过网络传输。 我使用 以下函数

    int floatToRawIntBits(float_t  x)
{
  union {
    float_t f;  // assuming 32-bit IEEE 754 single-precision
    int32_t i;    // assuming 32-bit 2's complement int
        } u;

 u.f = x;
 return u.i;
}
然后我试着用这个函数返回这个

union int_float_bits {
    int64_t int_bits;
  float_t float_bits;
};

float_t intBitsToFloat:(int64_t x)
{
    union int_float_bits bits;
    bits.int_bits = x;
    return bits.float_bits;
}
输出为:10.233387。 但是我想得到10.233387434223的原始值,而不是10.233387

intBitsToDouble是否是一种可能的解决方案

我也尝试使用这些代码

int DoubleToRawIntBits(double_t  x)
{
    union {
        double_t f;
        int64_t i;
    } u;

    u.f = x;
    return u.i;
}

但这里的结果是0.0000000


请帮助我,谢谢。

您的问题是第一个函数只返回64位双精度中的32位。仅传输这32位。因此,下一个函数不能构造整个double,因为它实际上没有double的32位。它不能无中生有地获取信息。如果它不在那里,它就不在那里。你需要传输整个双倍的数据。我不知道你到底在做什么,但如果你能发送32位,你也应该能发送64位。

如果你想保留一个双精度,为什么要在任何地方使用float?当你施放浮动时,你就失去了你想要保持的精度。你不能在任何地方都使用双精度和64位整数吗?我在整个代码中使用双精度而不是浮点型。但是结果是0.0000。您能显示结果为0.0000的代码吗?但是结果5.232444232211与实际值233387434223相差很远
union int_double_bits {
    int64_t int_bits;
    double_t double_bits;
};
double_t intBitsToDouble(int64_t x)
{
    union int_double_bits bits;
    bits.int_bits = x;
    return bits.double_bits;
}