c程序中从s64到double的转换错误?

c程序中从s64到double的转换错误?,c,linux,types,double,signed,C,Linux,Types,Double,Signed,在内核中:我将时间值读取为typeexterns64延迟 在用户空间中: extern double latency; //fp is reading the kernel value (i.e Latency) fscanf (fp,"%lf", latency); 如果我在用户空间中将内核中的s64读取为double。是否存在数据丢失的可能性?? 我应该使用哪种数据类型来获取完整的值???简短的回答:是的,肯定会丢失数据 想想看,一个有符号的64位整数(s64)和一个double都有6

在内核中:我将时间值读取为type
externs64延迟

在用户空间中:

extern double latency;
//fp is reading the kernel value (i.e Latency)
fscanf (fp,"%lf", latency);  
如果我在用户空间中将内核中的s64读取为double。是否存在数据丢失的可能性??
我应该使用哪种数据类型来获取完整的值???

简短的回答:是的,肯定会丢失数据

想想看,一个有符号的64位整数(
s64
)和一个
double
都有64位的存储空间。但是,s64只涉及整数,而双精度也可以表示分数。要做到这一点,它需要利用这些信息的一些位,因此它无法同时表示64位整数的完整范围


您应该使用工具链中的
stdint.h
中的
int64\t
作为有符号64位整数类型?使用
long
而不是
double
。谢谢!!int64\u t的格式说明符是什么??我可以将int64_t值发送到另一端的A_uint64(即客户端)吗?我知道格式说明符,但不知道:我可以将int64_t值发送到另一端的A_uint64吗?“inttypes.h”具有固定宽度整数类型所需的宏,特别是
SCNd64
用于
scanf
和friends.@user3615655如果您知道值i大于或等于零,可以安全地将其强制转换为uint64。不过,我不明白你为什么不保留int64_t表示。客户端为:UBYTE、SBYTE、UWORD、Swarm、ULONG、SLONG、A_UINT64、FLOAT32_IEEE、FLOAT64_IEEE:我应该在客户端使用哪一个??