Добрый вечер!
Купил себе arduino, захотелось поиграться с gsm-модемом.
И обнаружил, что компилятор не может соединить правильно длинные строки.
Код
void getPDUPack(String *phone, String *message, String *result, int *PDUlen)
{
// Поле SCA добавим в самом конце, после расчета длины PDU-пакета
*result += "01"; // Поле PDU-type - байт 00000001b
*result += "00"; // Поле MR (Message Reference)
*result += getDAfield(phone, true); // Поле DA
*result += "00"; // Поле PID (Protocol Identifier)
*result += "08"; // Поле DCS (Data Coding Scheme)
//*result += ""; // Поле VP (Validity Period) - не используется
String msg = StringToUCS2(*message); // Конвертируем строку в UCS2-формат
String msg2 = "" + *message;
Serial.println("msg: " + msg);
*result += byteToHexString(msg.length() / 2); // Поле UDL (User Data Length). Делим на 2, так как в UCS2-строке каждый закодированный символ представлен 2 байтами.
*result += msg;
*PDUlen = (*result).length() / 2; // Получаем длину PDU-пакета без поля SCA
*result = "00" + *result; // Добавляем поле SCA
}
StringToUCS2 длинную строку возвращает, но с msg она соединяться не хочет.
Значение msg
041B0410041C041F0410003A0020003100200412041A041B002C00200412003A002000310039002E
003600300025002C00200422003A002000320034002E00320030002A0043
Но в result попадает часть строки из 13-30 символов
Как обойти этот баг?