Arduino: Аварии и ошибки при конкатенации строк

Я пытаюсь объединить результат шифрования AES-256 в строку (чтобы сравнить эту строку с зашифрованной строкой, отправленной с телефона Android).

В принципе, конкатенация вроде бы работает, но после нескольких запусков возникают ошибки (нечитаемые символы, строка становится короче, а не длиннее) или сбои. Это воспроизводимо, сбои происходят в одной и той же точке после перезапуска.

Я извлек несколько строк кода Arduino, которые демонстрируют проблему. Он делает следующее:

  1. Создает случайное число и записывает его в массив (работает)
  2. AES-кодирует этот массив (работает)
  3. Строит HEX-представление каждого индекса массива (работает)
  4. Конкатенирует индексы в строку (сбой)

#include <SPI.h>
#include "aes256.h"  //include this lib

uint8_t key[] = {9,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,
                 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 }; //the encryption key

aes256_context ctxt; //context needed for aes library


void setup() {  
  Serial.begin(9600);  
}


void loop() {

  uint8_t data[] = {
       0x53, 0x73, 0x64, 0x66, 0x61, 0x73, 0x64, 0x66,
       0x61, 0x73, 0x64, 0x66, 0x61, 0x73, 0x64, 0x65, }; //the message to be encoded  

  long InitialRandom = random(2147483647); //0 to highest possible long
  String RandomString = "" ; 
  RandomString+=InitialRandom; //random number to String            
  Serial.println(RandomString); //for debugging

  //update data array: Random String into data array                 
  for (int x=0; x<RandomString.length(); x++){
       data[x] = RandomString[x];
  }

  //this encrypts data array, which changes  
  aes256_init(&ctxt, key); //initialize the lib
  aes256_encrypt_ecb(&ctxt, data); //do the encryption     
  aes256_done(&ctxt);  

  //Here the problem starts.............................................
  String encrypted=""; //the string I need finally 

  for (int x=0; x<sizeof(data); x++){ //data array is 16 in size    
        int a = data[x]; 
        String b = String (a, HEX);
        if(b.length()==1) b="0"+b;  //if result is e.g "a" it should be "0a"                         
        encrypted.concat(b);  //this line causes the problem!!! 
        //Serial.println(b); //works perfect if above line commented out    
        Serial.println(encrypted); //see the string geting longer until problems occur      
  }
  //Here the problem ends.............................................

        Serial.println(); //go for next round, until crashing
}

Я искал на форумах, пробовал разные способы конкатенации (оператор +, strcat). Все они имели схожие эффекты. Я прочитал, что в библиотеке String есть ошибка, обновил Arduino IDE до версии 1.0.

Это не дает мне покоя уже несколько дней, любая помощь будет высоко оценена,

Большое спасибо!

6
задан Anycorn 6 February 2012 в 23:30
поделиться