Преобразовать массив char в строку

У меня есть функция, которая возвращает массив char, и я хочу, чтобы это превратилось в String, поэтому я могу лучше обработать его (по сравнению с другими сохраненными данными). Я использую это просто для того, что должно работать, но по какой-то причине это не так (bufferPos - длина массива, buffer - это массив, а item - пустая строка):

for(int k=0; k<bufferPos; k++){
      item += buffer[k];
      }

buffer имеет правильные значения, а значит, bufferPos, но когда я пытаюсь преобразовать, например 544900010837154, он содержит только 54. Если я добавлю Serial.prints к следующему:

for(int k=0; k<bufferPos; k++){
                  Serial.print(buffer[k]);
                  Serial.print("\t");
                  Serial.println(item);
                  item += buffer[k];
                }

вывод следующий:

5   
4   5
4   54
9   54
0   54
0   54
0   54
1   54
0   54
8   54
3   54
7   54
1   54

Что мне не хватает? Это похоже на такую ​​простую задачу, и я не вижу решения...

Ответ 1

Если у вас завершен нулевой массив char, вы можете назначить массив char строке:

char[] chArray = "some characters";
String str(chArray);

Что касается вашего кода цикла, он выглядит правильно, но я попробую мой контроллер, чтобы узнать, не получаю ли я такую ​​же проблему.

Ответ 2

Спустя три года я столкнулся с той же проблемой. Здесь мое решение, все могут свободно нарезать-вставить. Самые простые вещи держат нас всю ночь! Запуск на ATMega и Adafruit Feather M0:

void setup() {
  // turn on Serial so we can see...
  Serial.begin(9600);

  // the culprit:
  uint8_t my_str[6];    // an array big enough for a 5 character string

  // give it something so we can see what it doing
  my_str[0] = 'H';
  my_str[1] = 'e';
  my_str[2] = 'l';
  my_str[3] = 'l';
  my_str[4] = 'o';
  my_str[5] = 0;  // be sure to set the null terminator!!!

  // can we see it?
  Serial.println((char*)my_str);

  // can we do logical operations with it as-is?
  Serial.println((char*)my_str == 'Hello');

  // okay, it can't; wrong data type (and no terminator!), so let do this:
  String str((char*)my_str);

  // can we see it now?
  Serial.println(str);

  // make comparisons
  Serial.println(str == 'Hello');

  // one more time just because
  Serial.println(str == "Hello");

  // one last thing...!
  Serial.println(sizeof(str));
}

void loop() {
  // nothing
}

И получим:

Hello    // as expected
0        // no surprise; wrong data type and no terminator in comparison value
Hello    // also, as expected
1        // YAY!
1        // YAY!
6        // as expected

Надеюсь, это поможет кому-то!

Ответ 3

Посетите https://www.arduino.cc/en/Reference/StringConstructor, чтобы легко решить проблему.

Это сработало для меня:

char yyy[6];

String xxx;

yyy[0]='h';

yyy[1]='e';

yyy[2]='l';

yyy[3]='l';

yyy[4]='o';

yyy[5]='\0';

xxx=String(yyy);

Ответ 4

Можете ли вы попытаться создать объект строки temp, а затем добавить к существующей строке элемента. Что-то вроде этого.

for(int k=0; k<bufferPos; k++){
      item += String(buffer[k]);
      }

Ответ 5

У меня есть поиск по нему снова и поиск этого вопроса в baidu. Затем я нахожу два способа:

1

char ch[]={'a','b','c','d','e','f','g','\0'};
string s=ch;
cout<<s;