我有一个双倍值= 10.233387434223。我想通过网络传输它。 我通过使用将此值转换为int32位 以下功能
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。 但我想要取回原始值0f 10.233387434223而不是10.233387。
intBitsToDouble可能是一种可能的解决方案吗?
我也尝试使用这些代码
int DoubleToRawIntBits(double_t x)
{
union {
double_t f;
int64_t i;
} u;
u.f = x;
return u.i;
}
并且
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;
}
但结果是0.0000000。
请帮帮我,谢谢。
答案 0 :(得分:1)
你的问题是第一个函数只返回64位双精度的32位。仅传输那些32位。因此,下一个函数不能构造整个double,因为它实际上没有32位的double。它无法从中获取信息。如果它不存在,那就不存在了。你需要传输整个双。我不确切知道你在做什么,但如果你能发送32位,你也应该能够发送64位。