从Arduino中的函数返回最初未知长度的char数组

卢克·詹森(Luuk D.Jansen)

我需要将json发送到服务器。该代码工作完美,但是由于我需要在两个位置上调用它,因此希望将其作为我们的功能。但是,我无法使其与char数组一起使用。一种可能是将char数组转换为我期望的String,但是我期望的内存效率不高。所以我想我将传递一个指针,在函数中分配大小,然后返回长度。但这似乎不起作用,“编码” char *似乎为空。

基本是我做错了。

这是代码:

      Serial.println("Connected");

      char* encoded;
      int contentLength = generateData(encoded);
      Serial.print("Data to be send, length: "); Serial.print(contentLength); Serial.println(" Data: "); Serial.println(encoded);
      // Send request to the server:
      client.println("POST /api/heartbeat HTTP/1.1");
      client.println("Host: localhost");
      client.println("Accept: */*");
      client.println("Content-Type: application/x-www-form-urlencoded");
      client.print("Content-Length: ");
      client.println(contentLength + 5);
      client.println();
      client.print("data=");
      client.print(encoded);

      // Done here, as the response availability sometimes takes time.
      lastConnection = millis();
      updateServer = false;
      free(encoded);

和功能:

int generateData(char* encoded) {   
  Serial.println("Preparing the data to be send....");
  String inputString = "{\"status\":\"OK\",\"hostname\":\"";
  inputString += hostname;
  inputString += "\",\"build\":";
  inputString += build;
  inputString += ",\"hardware\":\"";
  inputString += hardware;
  inputString += "\",\"sensors\":[";

  bool firstSensor = true;
  for (uint8_t i = 0; i < 8; i++) {
    if (temperatureValues[i] == 0) continue;
    if (!firstSensor) inputString += ",";
    inputString += "{\"sensor\":\"";
    inputString += temperatureAddresses[i];
    inputString += "\",\"value\":";
    inputString += String(temperatureValues[i]);
    inputString += ",\"type\":\"temp\"}";
    firstSensor = false;
  }

  inputString += "]";

  if (pendingResponses.length() > 0) {
    inputString += ",\"responses\":[";
    inputString += pendingResponses;
    inputString += "]";
    pendingResponses = "";
  }

  inputString += "}";

  byte plain[inputString.length() + 1];
  inputString.getBytes(plain, inputString.length() + 1);
  des.calc_size_n_pad(sizeof(plain));

  byte encodedByte[des.get_size()];
  byte plain_p[des.get_size()];
  des.padPlaintext(plain, plain_p);
  for (int i = 0; i < (des.get_size() / 8); i++) {
    byte intermitInput[8];
    byte intermitResult[8];
    for (int j = 0; j < 8; j++) {
      intermitInput[j] = plain_p[(i * 8) + j];
    }
    des.encrypt(intermitResult, intermitInput, (byte*)key);
    for (int j = 0; j < 8; j++) {
      encodedByte[(i * 8) + j] = intermitResult[j];
    }
  }

  int inputLength = sizeof(encodedByte);
  int newLength = Base64.encodedLength(inputLength);
  encoded = (char*) malloc(newLength + 1);
  encoded[newLength] = '\0';

  // Base64 Encoder
  Base64.encode(encoded, (char*)encodedByte, inputLength);
  return newLength;
}
杰克·利勒默斯(Jack Lilhammers)

您正在传递encoded价值

char* encoded;
int contentLength = generateData(encoded);

这意味着当您将其分配给 generateData()

encoded = (char*) malloc(newLength + 1);
encoded[newLength] = '\0';

您仅更改局部变量。
最快的解决方法是更改generateData()以通过引用代替其值来获取其参数,并且它应该可以工作

int generateData(char* &encoded)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Arduino中的函数返回最初未知长度的char数组

来自分类Dev

arduino,函数返回char数组

来自分类Dev

arduino,函数返回char数组

来自分类Dev

制作长度未知的char数组的工作副本

来自分类Dev

在C函数中返回char数组

来自分类Dev

函数返回的动态数组的长度

来自分类Dev

从 Rust 中的函数返回未知大小的多维数组

来自分类Dev

Javascript-返回函数中的数组长度

来自分类Dev

C中的char数组的长度

来自分类Dev

C#与C DLL互操作,如何编组从函数返回长度的char数组?

来自分类Dev

长度未知的Arduino串行消息

来自分类Dev

从C中的函数返回char数组的首选方法

来自分类Dev

从C ++中的函数返回2D char数组并打印

来自分类Dev

如何在C / C ++函数中返回char *数组?

来自分类Dev

如何从C中的函数返回2个昏暗的char数组

来自分类Dev

从函数返回可变长度数组

来自分类Dev

未知长度数组,用于顺序执行承诺的函数

来自分类Dev

无法从用于创建字符串排列数组的递归函数中返回数组的长度

来自分类Dev

Arduino使用未知大小的char *

来自分类Dev

Arduino使用未知大小的char *

来自分类Dev

如何从C中未知长度的数组中打印每个元素

来自分类Dev

返回深度未知的数组中的变量

来自分类Dev

函数接收char数组作为参数并返回char数组

来自分类Dev

创建一个函数以返回C中int数组的长度

来自分类Dev

在 R 函数中输入值的长度未知时管理 if 语句

来自分类Dev

如何在Arduino上使用char数组实现函数

来自分类Dev

数组长度在javascript中返回0

来自分类Dev

mongodb中数组的流星返回长度

来自分类Dev

如何仅在mongodb中返回数组的长度?

Related 相关文章

热门标签

归档