我的代码中存在一些问题:
UINT8 PoWerSignal = MyScanResults.signal;
char Signal[8];
sprintf(Signal, "%d", PoWerSignal);
float decibel = 0;
decibel = 10 * log(Signal);
dbgwrite("SIGNAL: ");
_dbgwrite(decibel);
有一个错误:
错误:'logf'
的参数1的类型不兼容
我不知道如何解决这个或它意味着什么。
答案 0 :(得分:1)
看起来你发送的是错误的数据类型(信号)。也许这应该是float或unsigned int而不是字符数组? “char”表示一串文本,您不能以数字形式对其进行操作。
答案 1 :(得分:1)
您正在将char
数组(也称为“字符串”,此处为Signal
,<{> 1}}中存储的值的字母数字表示形式传递给{ {1}},很可能不期望这样的输入,但是数字。
您可能希望传递函数PoWerSignal
的数字表示形式,如下所示:
log()
另一方面,函数log()
似乎期望#include <stdio.h> /* To have the prototypes foe the printf family of functions. */
...
UINT8 PoWerSignal = MyScanResults.signal;
char Signal[8] = "";
snprintf(Signal, sizeof(Signal), "%d", PoWerSignal);
float decibel = 10. * log(PoWerSignal);
...
数组。为了符合这一点,使用_dbgwrite()
中的char
创建一个“字符串”,以便传入其中,如下所示:
snprintf()
关于decibel
而不是...
char descibel_str[64] = "";
snprintf(decible_str, sizeof(decibel_str), "%f", (double) decibel);
dbgwrite("SIGNAL: ");
_dbgwrite(decibel_str);
的使用的注意事项:此“转换”函数的前一版本确实不会溢出目标缓冲区,即字母数字存储传递的参数的表示。这可以轻松地发生并且会引起不确定的行为。