Arduino BLE数据读取出现随机尾字符问题求解
解决Arduino BLE特征值读取末尾随机字符问题
问题核心是C语言字符串必须以\0(空字符)作为终止标记,你当前读取的字节数组没有添加这个终止符,Serial.print((char*)value)会持续从内存中读取直到遇到\0,因此会附带后续的随机内存内容。
以下是两种可行的解决方案:
方案一:手动添加字符串终止符
调整数组分配逻辑,多预留1字节存储\0,读取完成后手动添加终止符:
void incomingCharacteristicWritten(BLEDevice central, BLECharacteristic characteristic) { int dataLen = characteristic.valueLength(); // 多分配1字节用于存放字符串终止符 byte value[dataLen + 1]; incomingDataCharacteristic.readValue(value, dataLen); // 在数据末尾添加终止符,确保字符串正确截断 value[dataLen] = '\0'; Serial.print("Characteristic event, written: "); Serial.print((char *) value); }
方案二:使用Arduino String类简化处理
直接利用String类自动处理终止符的特性,代码更简洁:
void incomingCharacteristicWritten(BLEDevice central, BLECharacteristic characteristic) { String receivedData = incomingDataCharacteristic.value(); Serial.print("Characteristic event, written: "); Serial.print(receivedData); }
内容的提问来源于stack exchange,提问作者universe123
相关产品推荐
相关产品推荐

