gpt4 book ai didi

c++ - std::string 到 char* 而不切割字节

转载 作者:行者123 更新时间:2023-11-30 03:15:05 25 4
gpt4 key购买 nike

因此,我正在使用 BLE 库从移动应用程序接收字节,我想将这些字节保存在 ESP32(“Arduino”)的 SD 卡中。

BLE 库正在接收这种格式的数据,作为 std::string

std::string rxValue = pCharacteristic->getValue();

当我收到数据时,我正在执行 Serial.println(rxValue.length())为了验证我收到的 block 的大小,我收到了预期的 512 字节,并且它确实在打印 512

所以,一切都很好,我收到了我想要的 512 字节,接下来是问题:

为了保存到 SD 卡,写入 SD 卡的函数要求我提供 char * message

所以我必须转换 std::string进入 char * ,我是这样做的:

const char *cstr = rxValue.c_str();

但是每当我这样做时,一些字节(我认为是字母数字/符号范围之外的字节)被切断,在将它们转换为 char 数组后长度不再是 512,我需要它们是相同的 512 字节正确写入 SD 卡的所有字节。

为了测试这种行为,我打印了 char * 的长度查看 512 字节是否仍然存在:

strlen(cstr)

但是惊喜! 它们不是 512 字节,它们要小得多,所以当我尝试转换 std::string 时我做错了什么至 char *

转换 std::string 中的字节链的正确方法是什么?进入 char *不丢失字节:-(

提前谢谢你。

最佳答案

一个可能的解释是,如果接收到的字符串以某种方式在接收到的 512 字节中间某处包含空终止符 \0,这就是为什么 strlen 会推断出字符串长度小于 512。

我会在 strlen 返回的索引处打印出 c_str 字符的值,并查看它是否是空终止符。

关于c++ - std::string 到 char* 而不切割字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57319282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com