arduino 编程求助。
本人是C#程序员。很不适应C的。 所以来问问。一。 arduino uno 编程时,怎样才能使用 try{} catch{}容错。
二。 百度了一个替代C#中split 的函数,但原字符串过长时。拆分的字符串会出现问题,是乱的。
贴代码
static int split(char dst[], char* str, const char* spl)
{
int n = 0;
char *result = NULL;
result = strtok(str, spl);
while( result != NULL )
{
strcpy(dst, result);
result = strtok(NULL, spl);
}
return n;
}
三. char字符串中某个字符比较时怎样比较?
比如
字符串charA= "123456"
if(A == "1")这种比较是不允许的。
无奈现在用 if(String(A) == "1")但感觉这样很消耗CPU
四。接收蓝牙组件传递过来的字符串时。经常会两三条字符串合并收过来。所用以上的办法,都是为了解决字符串的问题。如果各位有更好的解决方案,希望告诉一下。 Arduino中,字符用'1', 定义使用:char A="123456";
Arduino读取字符串需要多读几次,每次读一个。 容错方面的我不太清楚,字符串的我倒是前段时间刚总结了下自己测试后的结果,原贴在:http://bbs.dp168.com/thread-108425-1-1.html
我把内容一起转过来吧:
String a,b;
byte c;
int int_n;//int类型32768
long long_n;//long范围2147483647
void setup() {
Serial.begin(57600);
while (!Serial); //只有leonardo这样等待,其他不用
Serial.println("Serial OK!");
}
void loop() {
a="alkDdsjFl";
int_n=a.toInt(); //转换为整数,如果字符串不是数字,则返回值为0,其他如toFloat( );
b=a.charAt(3); //取第几个字符,由0开始算位置
int_n=a.indexOf("kd"); //查找(可字符串数组),未查到为-1
int_n=a.indexOf("kd",3);//从第n位置开始查找字符串(可字符串数组),未查到为-1
int_n=a.lastIndexOf("kd");//和indexOf()一样,但是从字符串尾部开始???????????????
int_n=a.length(); //读取长度。其中是指String型的数组char变量
b=a.substring(3); //从2到结尾
b=a.substring(2,5); //从2到第3个字符(不是取3个)
b=a; b.concat("aslfj"); //把后面字符串添加到本字符串一起(连接)
b+=" ffffff "; //同上也是连接字符串,字符串相加
a= a + " sdfgsdfg "; //同上也是连接字符串,字符串相加
c=a.startsWith("a6k9"); //开始字符串 返回TRUE(1),否则0
c=a.endsWith("jf5l"); //结尾字符串 返回TRUE(1),否则0
int_n=a.compareTo("aFldfghsdfgsegsergdfl");//和字符串比较,相同则返回0,否则为其他数字
c=a.equals("alkd4sjfl"); //字符串完全相符1(TRUE)否则0
c=a.equalsIgnoreCase("alKDdsJfl"); //字符串完全相符1(TRUE)否则0,但是不限制大小写
c=a.endsWith("sj5fl"); //以字符串结尾1(TRUE)否则0
a.replace("l","6"); //用字符串6替换l
a.setCharAt(3,'9'); //把字符存储在给定的字符串的索引位置
a.toUpperCase(); //转大写
a.toLowerCase(); //转小写
a.trim(); //去前后空格
b=a.substring(2,5); //从2到第3个字符(不是取3个)
/*byte a=0xff;c=bitRead(a,3); //此函数返回val数值右边第n位的二进制数字*/
Serial.println("a=(" + a + ")");
/* 以下内容未测试
Serial.parseInt(); //可以直接从串口输入窗接收整数,省去字符处理和转换过程,未测试??????????
a.getBytes(b,4); //拷贝提供的字符长度到字节缓冲中,未测试??????????
toCharArray(buffer,len)—-从字符串0长度开始到给定的缓冲长度拷贝,未测试??????????
*/
Serial.print("b=|");Serial.print(b);Serial.print("|");
//Serial.print(int_n);
//Serial.print(byte(c)); //以二进制形式将数字发送到串口-终于可以发送"0"了
//Serial.print(c,16); //在串口输出16进制(字符串格式输出),16可写成HEX,也可用2来输出二进制的数字
delay (9999999999);
}
字符串charA= "123456"
if(A == "1")这种比较是不允许的。
=============
你在C#里这样写可以吗??C#没学好吧
if(a=='1')试试
C#与arduino完全不一样,C#多强悍哦, arduino单薄的跟片纸似的,想用类库什么的就打消这个念头吧 try, catch 是没有的,自己保证不需要try吧 bbc11234 发表于 2016-1-14 01:43 static/image/common/back.gif
字符串charA= "123456"
if(A == "1")这种比较是不允许的。
=============
字符串charA= "123456"
if(A == "1")这种比较是不允许的。
=============
这也只是打个比方,C#定义字符串是string,也不是char。""代表字符串''代表单个字符。学得不太好。但毕竟工作天天接触,所以这个我还是知道。我是感觉我问的是arduino。不是C#。所以感觉C#方面没必要这么认真。谢谢你的解答 msold5 发表于 2016-1-13 23:30 static/image/common/back.gif
容错方面的我不太清楚,字符串的我倒是前段时间刚总结了下自己测试后的结果,原贴在:http://bbs.dp168.com ...
要的就是这个,谢谢兄弟了。我找了一大圈也没找到string的这些成员函数 watersblue 发表于 2016-1-14 08:25 static/image/common/back.gif
字符串charA= "123456"
if(A == "1")这种比较是不允许的。
=============
实际上 char * A="123456";
if (A=='1')在 arduino里是可以的
没有什么不可以,这些是基础的C用法。你这半桶子水晃的可真厉害。
arduino里不可以的是调用现成的类库。 arduino的String库用起来非常不方便,开销还大,还不如不用。 bbc11234 发表于 2016-1-14 10:12 static/image/common/back.gif
实际上 char * A="123456";
if (A=='1')在 arduino里是可以的
没有什么不可以,这些是基础的C用法。 ...
刚才试了下确实可以。
当初应该就是输入"的问题。太马虎。VS提供的环境太好,有点过份依赖它了。工作十多年,水平越干越低。过2年估计就剩小学水平了。
页:
[1]