将 char 和 float 值传递给字符串

passing char and float value to a string

我需要使用字符串发送一个获取请求,因此我需要将一个浮点数和一个字符值传递给该字符串,以便发送 it.Im 尝试使用 ESP8266 将 PIC18F4550 连接到 wifi模块我还需要读取和写入数据库。我一直在使用我制作的这个功能来发送 AT 命令并且它工作正常:

void send (char dato[]){
    int i = 0;
    while (dato[i]!=0){
        TXREG=dato[i];
        i++;
        while(TRMT==0);
    }
    TXREG = 0x0D; 
    while(TRMT==0);
    TXREG = 0x0A;
}

我遇到的问题是我需要发送:

send("GET /ESPic/index3.php?temp=temp&luz=luz");

但是 luz 是 char,temp 是 float.Using FTDI232 和 Arduino IDE 我正在读取 PIC 和 ESP8266.I 之间的数据,我真的不知道如何做我需要的.

假设您的平台支持 sprintf,您可能需要:

float temp;
char luz;
...
char buffer[200];
sprintf(buffer, "GET /ESPic/index3.php?temp=%f&luz=%c", temp, luz);
send(buffer);

首先将 float 转换为 字符串


发送 float 的文本版本时,最好避免使用 "%f" 并使用足够精确的 "%e""%g""%a"

"%f" 对于大数字来说可能会很长。对于所有 float(小的)的大约一半,它转换为无信息的 +/- "0.000000"

这 3 种格式 e,g,a 可以更好地控制最大长度并且更容易确保使用所需的精度。

float temp;
char luz;
// send("GET /ESPic/index3.php?temp=temp&luz=luz");

#define SEND_FC_FMT "GET /ESPic/index3.php?temp=%.*e&luz=%c"
//                     -   d   .    ddd...ddd            e   - d...d [=10=] 
#define FLT_ESTR_SIZE (1 + 1 + 1 + (FLT_DECIMAL_DIG-1) + 1 + 1 + 5 + 1)
char buffer[sizeof SEND_FC_FMT + FLT_ESTR_SIZE];

sprintf(buffer, SEND_FC_FMT, FLT_DECIMAL_DIG-1, temp, luz);
send (buffer);