这是我的第一个问题,我希望我能在这里获得有用的答案或提示。
正如它在标题中所示:我需要在内核模块中从long转换为float,例如:78123456到78.123456,详情如下:
如果有任何办法,请尽快告诉我:
非常感谢任何提示。
非常感谢。
答案 0 :(得分:1)
这似乎不应该是一个内核模块。描述的花絮看起来好像是一个优秀的应用程序的一部分,它可以格式化和发送UDP数据包。
如果这不可行,也许可以使用FUSE-like方法代替?
答案 1 :(得分:0)
我的假设是你只想显示带有小数点的变量(可能变量测量微秒,你想以秒显示)而不是实际操作浮点变量(因为你已经指出了浮点数)内核空间中没有可用的操作。)
在这种情况下,不要将此问题视为从长整数到浮点的转换 - 而是将其视为字符串操作问题,尤其是因为您对strtol
的输入是字符串。
在伪代码中,如果您的输入和输出是单独的字符串:
void insertDecimalPoint(char const * strSrc, char * strDest, int maxlength)
{
1. find the length of strSrc
2. if length <= 6, then write a prefix of zeros like '0.000' to strDest
and then copy the source string to the destination
3. else, copy the first (length - 6) digits, then add a decimal point '.',
then copy the rest of the source to the destination.
}
或者,如果输入为长整数val
,则为
whole = val / 1e6;
fraction = val - whole * 1e6;
printf("%d.%06d", whole, fraction);
会做正确的事。