【发布时间】:2022-01-24 10:12:29
【问题描述】:
我是 zlib 库和 C++ 的新手。所以,我有压缩char的功能,并在STM32上使用compress()或compress2()。
我尝试了没有在 STM32 上编译的示例代码,它成功了!但是,当我编译到 STM32 时,它总是返回 (-2) 或 Z_STREAM_ERROR。当我打印结果时,它只打印第一个byte。我的设备上有大约 6 kb 的可用内存。代码有什么问题吗?
注意:在zconf.h 上,我已经将MAX_MEM_LEVEL 的数量降低到1 和MAX_WBITS 到5。
char* compressPayload(char* payload, char* outComp) {
Serial.println(payload);
//uLong comprLen = sizeof(outComp);
int ReturnCode;
uLong Length = (uLong)strlen(payload)+1;
uLong comprLen = compressBound(Length);
ReturnCode = compress((Bytef *)outComp, &comprLen, (const Bytef*)payload, Length);
Serial.println(ReturnCode);
return 0;
}
主函数调用:
char jsonNewData[300] = "{\"serialNumber\":\"123456\",\"msg\":\"000000000000000000000000000000000000000000000001\"}";
char jsonNewDataComp[200];
compressPayload(jsonNewData, jsonNewDataComp);
【问题讨论】:
-
你明白
sizeof(outComp);是指针的大小,而不是它所指向的大小,对?comprLen参数应该是输入时目标压缩缓冲区(即要写入压缩数据的位置)的大小,并且容量应该至少compressBound(Length)。坦率地说,目标缓冲区的大小应该是compressPayload的参数之一,如输入/输出,如果与compressBound(Length)相比尺寸过小,则应中止压缩并进行适当的错误处理。 -
@WhozCraig 我已经按照您的建议进行了编辑,但仍然面临相同的结果。总是返回 (-2)。还有什么问题吗?
标签: c++ arduino compression stm32 zlib