Transform char array into String
我有一个返回char数组的函数,我希望将其转换为String,以便更好地处理它(与其他存储的数据进行比较)。 我使用这个简单的方法应该可以工作,但是由于某些原因(
1 2 3 | for(int k=0; k<bufferPos; k++){ item += buffer[k]; } |
1 2 3 4 5 6 | for(int k=0; k<bufferPos; k++){ Serial.print(buffer[k]); Serial.print("\t"); Serial.println(item); item += buffer[k]; } |
输出是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
我想念什么? 感觉像是一个简单的任务,我看不到解决方案...
如果您的char数组为null终止,则可以将char数组分配给字符串:
1 2 | char[] chArray ="some characters"; String String(chArray); |
至于您的循环代码,看起来不错,但是我将尝试在控制器上查看是否遇到相同的问题。
访问https://www.arduino.cc/en/Reference/StringConstructor轻松解决问题。
这对我有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); |
三年后,我遇到了同样的问题。这是我的解决方案,每个人都可以随意粘贴。最简单的事情使我们整夜不眠!在ATMega和Adafruit Feather M0上运行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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's 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's 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 } |
我们得到:
1 2 3 4 5 6 | 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 |
希望这对某人有帮助!
可能您应该尝试创建一个临时字符串对象,然后将其添加到现有项目字符串中。
这样的事情。
1 2 3 | for(int k=0; k<bufferPos; k++){ item += String(buffer[k]); } |
我已再次搜索它并在百度中搜索此问题。
然后我发现2种方法:
1,
1 2 3 | char ch[]={'a','b','c','d','e','f','g','\0'}; string s=ch; cout<<s; |
请注意,对于字符数组ch,必须使用' 0'。
2,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<iostream> #include<string> #include<strstream> using namespace std; int main() { char ch[]={'a','b','g','e','d','\0'}; strstream s; s<<ch; string str1; s>>str1; cout<<str1<<endl; return 0; } |
这样,您还需要在char数组的末尾添加' 0'。
另外,strstream.h文件将被放弃,并由stringstream替换