【问题标题】:Arduino HttpClient getString issue with NULL characters. ESP32带有 NULL 字符的 Arduino HttpClient getString 问题。 ESP32
【发布时间】:2018-06-05 17:27:38
【问题描述】:

对我的 http.Get() 方法的响应应该是十六进制的 0x00,0x00,0x00,0x00,0x04,0x08,0xff 但是当你尝试使用收集数据时 响应 = http.getString() ; 我得到空字符串可能是因为 getString() 通过看到 0x00 (NULL) 来终止它

那么有什么方法可以替换getString()或者在get方法响应中接收unit8_t字节

如果我在服务器上编辑对 0x04,0x08,0xff 的响应,则 ps 代码可以正常工作

【问题讨论】:

  • http 协议旨在使用完全 ascii 可见的代码字符串进行通信。如果您不想使用“文本”进行通信,请不要使用 http 协议。
  • @webmite 图片是通过 HTTP 协议发送的,它们是二进制的。
  • @gre_gor 仅在正确封装在协议中时。该问题明确表示他们正在尝试使用 getString() 函数。因此,“字符串”是预期的数据类型。
  • 只是为了澄清我得到我的二进制值,如果它们不是以 null 开头的
  • 通常用什么标记字符串的结尾?你为什么不期望一个名为“getString”的函数在那里结束?

标签: arduino httpclient arduino-ide arduino-esp8266 esp32


【解决方案1】:

使用 http.getstream

WiFiClient * stream = http.getStreamPtr();
      while(http.connected() && (len > 0 || len == -1)) 
      {
      // get available data size
      size_t size = stream->available();
      if(size) {
       // read up to 128 byte
      int c = stream->readBytes(response, ((size > sizeof(response)) ? 
      sizeof(response) : size));
      if(len > 0) {
                  len -= c;
                  }
               }
       delay(1);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多