Unlike C-style strings, std::strings can contain the null character. For example std::string("hello\0world").
However, in BLERemoteCharacteristic.cpp, the std::string newValue is converted to a C-style string before being sent to writeValue. This means that any characters after a null character in newValue will not be sent to writeValue. For example, std::string("hello\0world") will be converted into the C-style/null-terminated string "hello\0".
|
writeValue((uint8_t*)newValue.c_str(), strlen(newValue.c_str()), response); |
A fix would be to use the data() method on std::string and, more importantly, the length() method on std::string. newValue.length() will give the total length of the string (including any null characters), however strlen will only return the length up to the first null character.
void BLERemoteCharacteristic::writeValue(std::string newValue, bool response) {
writeValue((uint8_t*)newValue.data(), newValue.length(), response);
} // writeValue