将 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);
我需要使用字符串发送一个获取请求,因此我需要将一个浮点数和一个字符值传递给该字符串,以便发送 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);