Преобразовать массив 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;