极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12008|回复: 3

String的问题

[复制链接]
发表于 2015-5-16 22:29:28 | 显示全部楼层 |阅读模式
本帖最后由 zoologist 于 2015-5-17 13:50 编辑

折腾了一个晚上,比如我想从串口得到一个输入,然后再输出到串口上,然后写下面的程序

String comdata="";
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  
}

void loop() {
  // put your main code here, to run repeatedly:
while (Serial.available() > 0)
  {
    comdata += Serial.read();
    delay(2);
  }  
if (comdata.length()>1) {Serial.println(comdata);  comdata="";}

}

但是惊奇的发现,结果属下面这样(貌似把每个字符转为了char对应的数值)


如果想得到想要的结果,需要做一个强制转换
String comdata="";
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  
}

void loop() {
  // put your main code here, to run repeatedly:
while (Serial.available() > 0)
  {

    comdata +=(char)Serial.read();
    delay(2);
  }  
if (comdata.length()>1) {Serial.println(comdata);  comdata="";}

}



谁能帮我解释一下?谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-5-17 03:44:29 | 显示全部楼层
你已經看到問題了吧.

String class 的特性, 當 operator "+" 之後是 numeric type, 會自動把數值先轉成 字符再加上去.
"1" 的數值就是 49, 由於 Serial.read() 的結果是 int type, 當你用 comdata += Serial.read() 時, comdata 是 String, Serial.read() 是 int, 就會執行 String "+" int 的 operation.  當你輸入第一個字 "1" 時, 就會先把 "1" (int value 為 ASCII 值, 即 49) 轉成 "49", 然後再連接上去.  之後都是一樣了.

當你加上 (char) 的轉換後, comdata += (char)Serial.read(), 就變成是 String "+" char 的 operation, 這時就不需要任何轉換而直接連上去了.

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-17 09:20:38 | 显示全部楼层
谢谢哈  长知识
回复 支持 反对

使用道具 举报

发表于 2015-5-18 22:05:25 | 显示全部楼层
Super169 发表于 2015-5-17 03:44
你已經看到問題了吧.

String class 的特性, 當 operator "+" 之後是 numeric type, 會自動把數值先轉成  ...

受教了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 02:09 , Processed in 0.047756 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表