如何编写一个未知长度的char [],包括一个变量整数(整数的长度是可变的),如下所示:
char data[] = "{""LDRValue"":" + LDRReading + "}";
LDRReading是唯一的变量。
这是代码:
int LDRReading = analogRead(LDR);
int d = LDRReading;
int b = d - c;
if (b > 50 || b < -50) {
c = d;
// String data = "{""LDRValue"": ";
// data = data + LDRReading;
// data = data + "}";
char data[] = "{\"LDRValue\": 300}";
Serial.println("\nStarting connection to LDR server...");
if (client.connect(server, 8060)) {
Serial.println("connected to LDR post server");
client.println("POST /api/sensor HTTP/1.1");
client.println("Host: 192.168.2.123");
client.println("Content-Type: application/json");
client.print("Content-Length: ");
client.println(strlen(data));
client.println();
client.print("{\"LDRValue\":");
client.print(LDRReading);
client.print("}");
delay(300);
}
Serial.println(d);
client.stop();
答案 0 :(得分:2)
EthernetClient
,它是您正在使用的对象类,是Client
的子类,它是Stream
的子类,它是{{1}的子类因此,应通过客户端实例打印 String 对象,因为Print
具有以下方法:
Print
因此,这应该有效:
size_t print(const String &);
size_t print(const char[]);
size_t println(const String &s);
size_t println(const char[]);
请注意我在代码中添加的注释:我认为您应该使用int LDRReading = analogRead(LDR);
int d = LDRReading;
int b = d - c;
if (b > 50 || b < -50) {
c = d;
String data = "{\"LDRValue\": "; // FIXED: escaped " symbols
data = data + LDRReading;
data = data + "}";
Serial.println("\nStarting connection to LDR server...");
if (client.connect(server, 8060)) {
Serial.println("connected to LDR post server");
client.println("POST /api/sensor HTTP/1.1");
client.println("Host: 192.168.2.123");
client.println("Content-Type: application/json");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data); // FIXME: why don't you use println() here?
client.flush(); // NOTE: this is strongly advised to push all
// data in a stream out if you don't add
// a line feed.
delay(300);
}
Serial.println(d);
client.stop();
}
或之后调用println()
以确保您在流上打印的数据被有效推出。我写了client.flush()
只是为了不改变你的原始代码。
如果由于某些特定原因,您认为将数据打印为字符串存在特定问题,那么您始终可以获取其 char [] 等效项在其上调用client.print()
:
data.c_str();
答案 1 :(得分:-2)
为什么不使用std :: string?
std::string s("{""LDRValue"":" + LDRReading + "}");
const char* szData = s.c_str();
如果您因任何原因无法使用std :: string,您可以先使用 strlen 确定内容的长度,然后通过调用 new