この週末にバイナリファイルをunsigned char配列に変換するためにxxd -iを使用していましたが、小さなバイナリファイルをarduinoコードに埋め込んでmini webやその他のサービス。問題は、既存のライブラリの関数がconst char *、stringまたはFileデータ型のいずれかを期待しているようです。 (もちろんunsigned char配列はchar配列ではありませんので、文字列に変換されません)ESP8266 WebServer unsigned charをストリームする方法
C++の深い知識に慣れていない(まだ学習しています) ESP Webサーバーコードまたはそれに類するものの上にxxdから作成されたunsigned char配列をストリームするには?そして/または同じから送信するためのバイナリファイルをエンコードする良い方法はありますか?
私は基本的に 'rest'ベースのespデバイスを構築することを検討していますが、基本的な機能を直接接続して設定したり、デバイスから基本的なテレメトリを取得するための初歩的なhtml/jsインターフェイスが必要でした。私の考えでは、非常に合理化されたhtml/jsコーディングとgzipが続くminifyと組み合わせて、必要に応じてバイナリ配列のコードに直接そのような基本的なインタフェースを置くことができました。より複雑なデバイスの場合、私はうまく動作するようにsdカードのWebサーバーを取得しましたが、すべてのアプリケーションにsdカードを使用する必要はありません。私は、巨大な文字列や関数や関数の呼び出しでHTMLコンテンツに頼ることに戻る前に、別のオプションとして動作させようとしています。 何か助けていただければ幸いです。コメント欄で述べたようにXXD -i
unsigned char index_htm_gz[] = {
0x1f, 0x8b, 0x08, 0x08, 0x25, 0x38, 0xcf, 0x58, 0x02, 0x03, 0x69, 0x6e,
0x64, 0x65, 0x78, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x68, 0x74, 0x6d, 0x00,
0x5d, 0x8d, 0xb1, 0x6a, 0xc4, 0x30, 0x10, 0x44, 0x7b, 0x7d, 0xc5, 0xe6,
0x03, 0xce, 0x4a, 0xc0, 0x98, 0x14, 0x2b, 0x35, 0x97, 0x40, 0xba, 0x4b,
0x61, 0x08, 0x29, 0x65, 0x7b, 0x2d, 0x2d, 0xb7, 0xb2, 0x8d, 0xb4, 0xc9,
0x91, 0xbf, 0x8f, 0x42, 0xba, 0x83, 0x61, 0x18, 0x1e, 0x33, 0x0c, 0x3e,
0xbc, 0x5c, 0xce, 0xe3, 0xe7, 0xfb, 0x2b, 0x24, 0xcd, 0xe2, 0xf1, 0xcf,
0x41, 0xc2, 0x16, 0x1d, 0x6d, 0x1e, 0x33, 0x69, 0x80, 0x39, 0x85, 0x52,
0x49, 0xdd, 0x97, 0xae, 0xa7, 0x67, 0x8f, 0xca, 0x2a, 0xe4, 0xdf, 0x48,
0x64, 0x07, 0xf3, 0xb1, 0x17, 0x59, 0xd0, 0xfe, 0x33, 0x14, 0xde, 0xae,
0x90, 0x0a, 0xad, 0x6e, 0xae, 0xd5, 0xe6, 0xc0, 0x5b, 0xd7, 0x02, 0x14,
0x12, 0x57, 0xf5, 0x47, 0xa8, 0x26, 0x22, 0x6d, 0x1f, 0x4f, 0x77, 0xf3,
0x06, 0xf0, 0xf0, 0x63, 0xe2, 0x0a, 0x4d, 0x01, 0x6e, 0x34, 0xc1, 0x11,
0x22, 0x75, 0x68, 0x0f, 0x8f, 0x9c, 0x23, 0x4c, 0x7b, 0x59, 0xa8, 0xb8,
0x47, 0x48, 0xc4, 0x31, 0xa9, 0x1b, 0x7a, 0x30, 0xb5, 0xcc, 0x8e, 0x73,
0xab, 0x55, 0xfb, 0x3d, 0x45, 0xda, 0x87, 0xbe, 0x8b, 0xbc, 0xc2, 0x8d,
0x17, 0x4d, 0xad, 0xe0, 0x8d, 0xf9, 0x05, 0x3d, 0x2a, 0xb3, 0xe0, 0xdd,
0x00, 0x00, 0x00
};
unsigned int index_htm_gz_len = 207;
から--- 例編集
---、私が試したことの一つは、次通るチャーCONSTするunsigned char型から型を切り替えた。
このような場合にvoid sendCompressed(String content_type, const char * content, unsigned int len) {
webServer.setContentLength(len);
webServer.sendHeader("Content-Encoding", "gzip");
webServer.send(200, content_type, String(content));
}
、ヘッダからのデータでsendCompressedを呼び出すであろう私のhandleRoot機能:
void function handleRoot() {
sendCompressed("text/html", index_htm_gz, index_htm_gz_len);
}
エラーなしでコンパイルされますが、何も出力しません。私はまた、これは理想的ではないと考えています。なぜなら、Stringデータは一般的に7ビットであり、明らかにバイナリ圧縮データはないからです。
署名は本当に重要ですか?とにかく同じデータだよ –
私は知らない - 私が言ったように、まだC++にグリーン。私はタイプについての良いリファレンスを見つけることを試みていました。それはxxdが出しているようです。私がそれについて見つけた唯一の事は、それが本質的にバイナリ(そして単に文字ではない)データであったということでした。 – Scott
私は、宣言をコードの代わりにconst charに切り替えようとしましたが(コードで盲目的に突っ込む)、渡すときに変数を文字列(コンテンツ)にラップするとエラーなしでコンパイルされます。しかし、Webサービスから何も出てこない。 – Scott