服务器代码:
s64 interrupt;
以上是内核代码,我正在通过用户应用程序读取上述值,如下所示。
用户代码:
uint64 measurements [17];
uint64 Latency;
fscanf (fp, "%u", Latency); // I am reading the interrupt from server code using fscanf
measurements[17] = Latency;
但最后我想将FLOAT64_IEEE格式的测量[17]发送到客户端。 怎么做那个转换? 有人可以帮帮我吗?
答案 0 :(得分:2)
将64位整数转换为double
的基本方法是
uint64 x = 12345132091298;
double d = x;
然而,这假设x
的值小于2 53 作为整数值,或者你不介意丢失最后一位。换句话说,就像这样:
uint64 x1 = 1 << 53;
uint64 x2 = x + 1;
double d1 = x1;
double d2 = x2;
cout << d2 - d1 << endl;
将导致零(假设编译器不是&#39; t&#34;聪明&#34;并且在执行d2-d1
之前将结果计算为常量)。
我个人不会在&#34;客户端&#34;上转换为浮点数。 - &#34;以后&#34;你处理你的原始数据(至少如果你(冒险)丢失数据),假设不需要减少数据(在这种情况下,它将64位转换为64位),那就更好了-Bits)。
答案 1 :(得分:1)
假设您正在谈论IEEE 754标准,那么您应该实现自己的例程,以便在您的代码可移植时将值转换为该格式。
如果不需要可移植性并且两种架构都相同(您的计算机和客户端计算机)并且都使用符合IEEE 754的FPU,则可以将该值转换为float,然后将其传输到客户端。 / p>
希望这能为你提供进一步研究的线索。
编辑#1(回复评论):
请参阅here。