极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18604|回复: 12

请教各位大神,如何将string类型转换为char类型?

[复制链接]
发表于 2013-4-30 19:23:17 | 显示全部楼层 |阅读模式
在网上搜索了好多答案,要么是C的,arduino不适用,要么太简略没看懂,请各位高手给个解答!不胜感激!
简单地说有个字符串text6="ABCDEFG";(字符串是程序从串口读出来的,事前无法知道内容,ABCDEFG是举个例子)
而液晶屏显示语句
putChar16x16(unsigned char row,unsigned char col,unsigned char count,unsigned char const *put,bool background)。
我怎么能让它显示出来?

谢谢了!
回复

使用道具 举报

发表于 2013-4-30 22:15:43 | 显示全部楼层
试一下:
putChar16x16(row,col,sizeof(text6)-1 ,text6,background);
回复 支持 反对

使用道具 举报

发表于 2013-5-1 09:12:47 | 显示全部楼层
// String轉char
String s = "ABCDEFG";
char buf[s.length() + 1];
s.toCharArray(buf, s.length() + 1);
Serial.println(buf);     // Return "ABCDEFG"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-1 11:00:01 | 显示全部楼层
本帖最后由 fangtaonj 于 2013-5-1 11:01 编辑
luhuaneda 发表于 2013-4-30 22:15
试一下:
putChar16x16(row,col,sizeof(text6)-1 ,text6,background);


l谢谢您的回复!按您的建议我执行如下语句:
cd.putChar16x16(5,4,(text6.length()-1) ,text6,true);
提示错误。
错误内容:
GPScommOK0430_ino.ino: In function 'void setup()':
GPScommOK0430_ino:41: error: no matching function for call to 'lcd12864wrt::putChar16x16(int, int, unsigned int, String&, int)'
C:\Documents and Settings\ft\桌面\arduino-1.0.4\libraries\Lcd12864wrt/Lcd12864wrt.h:54: note: candidates are: void lcd12864wrt::putChar16x16(unsigned char, unsigned char, unsigned char, const unsigned char*, bool)
感觉是变量类型不对,请问该如何修改?
用sizeof(text6)-1代换(text6.length()-1)结果也是一样
我是新手,不太懂变量类型如何转换。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-1 11:40:51 | 显示全部楼层
pizg 发表于 2013-5-1 09:12
// String轉char
String s = "ABCDEFG";
char buf[s.length() + 1];

谢谢,您的代码确实好用,正在调试程序。谢谢您!
回复 支持 反对

使用道具 举报

发表于 2013-5-1 17:16:38 | 显示全部楼层
fangtaonj 发表于 2013-5-1 11:00
l谢谢您的回复!按您的建议我执行如下语句:
cd.putChar16x16(5,4,(text6.length()-1) ,text6,true); ...

你可能沒有這函式
putChar16x16(row,col,sizeof(text6)-1 ,text6,background);
的Library,
請檢查一下你是否已安裝正確的Library.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-1 18:47:53 | 显示全部楼层
pizg 发表于 2013-5-1 17:16
你可能沒有這函式
putChar16x16(row,col,sizeof(text6)-1 ,text6,background);
的Library,

库有的,这个函数的具体要求就是从这个库的CPP文件中看到的。谢谢您的回复。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-1 21:39:33 | 显示全部楼层
本帖最后由 fangtaonj 于 2013-5-1 21:41 编辑
pizg 发表于 2013-5-1 09:12
// String轉char
String s = "ABCDEFG";
char buf[s.length() + 1];


pizg兄您好!按您的建议编了代码,但发现一个有趣和奇怪的现象,如果字符串是全部英文字母,显示很正常,如果这个字符串全是数字,就不能显示好像死机一样。有部分字符部分数字的就可能行可能不行没办法只好用如下代码:
  String mh="V:";
  text6="123456789";
  mh.concat(text6);
  lcd.setCursor(0,5);
  char buf[mh.length() + 1];
  mh.toCharArray(buf, mh.length() + 1);
  lcd.print(buf,false);
lcd.print(buf,false);是字符串变成char变量后可以使用的打印语句。
前几句代码是把全数字的字符串加上一个字母头“V:”
即便这样也不稳定,请问是何原因?是不是带数字的字符串有问题?

回复 支持 反对

使用道具 举报

发表于 2013-5-1 23:51:03 | 显示全部楼层
fangtaonj 发表于 2013-5-1 21:39
pizg兄您好!按您的建议编了代码,但发现一个有趣和奇怪的现象,如果字符串是全部英文字母,显示很正常 ...


試一下這樣:
  String mh="V:";
  text6="123456789";
  mh += text6;
  lcd.setCursor(0,5);
  char buf[mh.length() + 1];
  mh.toCharArray(buf, mh.length() + 1);
  lcd.print(buf,false);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-2 08:36:10 | 显示全部楼层
pizg 发表于 2013-5-1 23:51
試一下這樣:
  String mh="V:";
  text6="123456789";

pizg兄,这样还是不行,还是老样子。我换了一个板子也还是一样。谢谢您的回复!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-2 13:29:22 | 显示全部楼层
谢谢liangzuoting兄!确实好用,但有个现象:l  
  text6= "1234567.8901";
//  char buf[text6.length() + 1];

  char *buf = &text6[0]; //P points to first char of text6 now !
  text6.toCharArray(buf, text6.length()+1);
glcd.drawstring(16,7, buf);
  glcd.display();
  delay(1000);
屏幕显示234567.8901,少个第一个数字字符1,不知何故?
回复 支持 反对

使用道具 举报

发表于 2013-5-2 15:54:23 | 显示全部楼层
fangtaonj 发表于 2013-5-2 13:29
谢谢liangzuoting兄!确实好用,但有个现象:l  
  text6= "1234567.8901";
//  char buf[text6.length() ...

你还是写差了。
有了这一句 : char *buf = &text6[0];
这一句也就不用了 : text6.toCharArray(buf, text6.length()+1);

显示少1的问题,应该是屏幕显示不下整个串了吧,16,7是坐标么,可以把字往左挪一点试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-2 18:44:40 | 显示全部楼层
liangzuoting 发表于 2013-5-2 15:54
你还是写差了。
有了这一句 : char *buf = &text6[0];
这一句也就不用了 : text6.toCharArray(buf,  ...

谢谢liangzuoting 兄!去掉你说的这句text6.toCharArray(buf, text6.length()+1);
确实还是正常工作。显示少1的问题不知什么原因,坐标16,7怎么移动都还是一样,真奇怪。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 03:26 , Processed in 0.085497 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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