极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19515|回复: 10

char[]与string数据如何连接起来。

[复制链接]
发表于 2014-9-19 21:48:42 | 显示全部楼层 |阅读模式
RT,小菜请教各位大虾。

我的逻辑如下:


[pre lang="arduino" line="1" file="char2String"]

unsigned char array_year[6];
void setup(void){
  array_year[0] = ' ';
  array_year[1] = '2';
  array_year[2] = '0';
  array_year[3] = '1';
  array_year[4] = '4';
  array_year[5] = 0;
}

void loop(void){
  String test_Str = "Friday";
#if 0
  test_Str += " 2014";  //这样可以
#elseif
  test_Str += array_year; //这样不行
#endif
  Serial.print(test_Str);   // 目的是向串口输出  "Friday 2014"
}[/code]

因为  unsigned char array_year[6];这个数字里面的数据是会改变的,所以没有采用这种
char *array_year = " 2014";这种形式。。

请问有没有大虾知道怎么把  char[] 合并到string对象中数据的末端,感谢了先。
回复

使用道具 举报

发表于 2014-9-20 01:47:41 | 显示全部楼层
test_Str += String(array_year);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 12:25:29 | 显示全部楼层
本帖最后由 古陵逝烟 于 2014-9-20 12:54 编辑
Super169 发表于 2014-9-20 01:47
test_Str += String(array_year);


感谢关注:但是这个报错了。





arduino提供的强制类型转换的方法里面也木有String()

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2014-9-20 13:35:53 | 显示全部楼层
试了下可以的
void setup()
{
        String a = "mama";
        char b[] = "haha";
        a += String(b);

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 14:04:23 | 显示全部楼层
SproutME 发表于 2014-9-20 13:35
试了下可以的
void setup()
{

谢谢关注。。

测试发现

unsigned char  a[10] 或 unsigned char  a[]   这个不行
char  a[10] 或者unsigned char  a[]   这个倒是可以
不清楚这两个在这里有什么区别。

不管咋样,谢谢层主了!解决一个大问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 14:23:21 | 显示全部楼层
Super169 发表于 2014-9-20 01:47
test_Str += String(array_year);

回头看了下,原来这个不是类型转换,而是调用了构造函数,生成另外一个String对象再重载 operator+。
回复 支持 反对

使用道具 举报

发表于 2014-9-20 15:41:19 | 显示全部楼层
古陵逝烟 发表于 2014-9-20 14:04
谢谢关注。。

测试发现

oh, 沒留意你用了一個 "unsigned char",  這就是問題了.
char 是用一個 byte 是記錄字符的, 本身是沒有 sign 的意思, unsigned char 有點畫蛇添足了.  
我想你也不設定一個 unsigned String 吧, 為何又要造一個 unsigned char?

寫 String 庫的人, 相信也認為 unsigned char 是沒意義, 所以沒有做出針對 unsigned char 的設定, 而 C++ 在這方面有點嚴格, 既然你要 pass 一個 unsigned char*, 原本定義的 char* 就視作不同了, 所以就找不到合適的.

或者樓主試想想.... unsigned char 中的 unsigned 有什麼意義吧.  
沒意義的話, 就不要加上去了, 否則只會令compiler 以為是一個特殊的 type, 而不能配對.

回复 支持 反对

使用道具 举报

发表于 2014-9-20 15:47:03 | 显示全部楼层
古陵逝烟 发表于 2014-9-20 14:23
回头看了下,原来这个不是类型转换,而是调用了构造函数,生成另外一个String对象再重载 operator+。

對, String 是一個 Class, 不能靠原生的轉換生成, 所以調用了 String class 的 constructor 去生成一個 String object, 配合到 operator + 中使用.

當然, 也可以自己寫一個 function, 把 char* 中一個一個的 char , 不斷用 operator + 去合成整人個 String, 但就比較多工序了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 17:34:05 | 显示全部楼层
Super169 发表于 2014-9-20 15:41
oh, 沒留意你用了一個 "unsigned char",  這就是問題了.
char 是用一個 byte 是記錄字符的, 本身是沒有  ...

个人思维误区了,以前习惯用 unsigned char 的 type 来定义一个字符串,果断受教了!ths!~
回复 支持 反对

使用道具 举报

发表于 2016-5-24 23:15:43 | 显示全部楼层
楼楼 可以问你一个问题么  String Num1=“danger”;
                                       String Num2=“”;
Num2是一个变化的值,但是我想把Num2放到Num1后面,应该怎么弄。。。
回复 支持 反对

使用道具 举报

发表于 2016-5-25 08:30:03 | 显示全部楼层
本帖最后由 maxims 于 2016-5-25 08:31 编辑

sprintf(String,"%S",char Arry);


例如:把RFID的SN号合并到TpStr字符串变量
sprintf(TpStr, "%02X%02X%02X%02X", rfid.uid.uidByte[0], rfid.uid.uidByte[1], rfid.uid.uidByte[2], rfid.uid.uidByte[3]);
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 08:14 , Processed in 0.042591 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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