查看“第四十八课--C语言数据处理函数介绍/zh”的源代码
←
第四十八课--C语言数据处理函数介绍/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==目的== 本教程将给大家介绍字符串转int、 int转字符串,怎么替换字符这类的问题。其它的教程都偏向于硬件,对C语言的熟知不够,现在就给新同学列出几个常用的数据处理、转换的函数,纯C的东西,这些看看书就能学会的,很好找资料,C语言是基础。 ==设备== *其他硬件设备 ==字符串转int atoi== 函数原型int atoi(const char *nptr); int val = atoi("12"); 这样va就l等于12 <source lang="cpp"> // the setup function runs once when you press reset or power the board void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); const char* sss="12"; int val = atoi(sss); Serial.println(val); } // the loop function runs over and over again forever void loop() { } </source> ==int转字符串 itoa== 函数原型:char*itoa(intvalue,char*string,intradix); int number=12345; char string[25]; itoa(number,string,10); string就是12345 后面的10是说转化成10进制 16就是转化成16进制 8就是转化成8进制 ,也可以转化成2进制 <source lang="cpp"> // the setup function runs once when you press reset or power the board void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); int number=12345; char string[25]; itoa(number,string,10); Serial.println(string); } // the loop function runs over and over again forever void loop() { } </source> ==字符串截取 strncpy== 原型:char*strncpy(char*dest,char*src,size_tnum); 大家知道strcpy 是子环节复制字符串,可能不知道还有个strncpy,这是复制指定长度的字符串 chardes[]="Hello,iam!"; charsource[]="abcdefg"; strncpy(chardes,charsource,3); 这时chardes的值是abc 注意这里可不是把abc添加在!后面的,是从chardes这个数组的首地址开始赋值的,最后会加上'\0'做结束符。 改变一下用法 strncpy(chardes+1,charsource+2,3); 这时候chardes的值是Hcde 为什么是这个值,能看懂不?自己思考一下。偏移哈。 <source lang="cpp"> char* chardes="Hello,iam!"; char* charsource="abcdefg"; // the setup function runs once when you press reset or power the board void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); strncpy(chardes,charsource,3); Serial.println(chardes); strncpy(chardes+1,charsource+2,3); Serial.println(chardes); } // the loop function runs over and over again forever void loop() { } </source> ==字符串构造 sprintf== 原型 int sprintf( char *buffer, const char *format, [ argument] … ); 这个应该很多人都知道。 char dest[20]; int val=12; sprintf(dest,"val=%d",val); dest的值就是"val=12" 那个12也是字符串了哈注意下。 这个函数也可以整形、浮点型转字符串 sprintf(dest,"%f",3.1415926f); dest 就是“3.1415926” sprintf(dest,"现在的时间是%s,请注意","2014-04-09 11:27:21"); 后面这个字符串也可以换成变量 dest的值是 "现在的时间是2014-04-09 11:27:21,请注意" <source lang="cpp"> // the setup function runs once when you press reset or power the board void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); char dest[20]; char dest1[50]; char dest2[50]; int val=12; sprintf(dest,"val=%d",val); Serial.println(dest); sprintf(dest1,"%f",3.1415926f); Serial.println(dest1); sprintf(dest2,"time now is %s, pay attention","2014-04-09 11:27:21"); Serial.println(dest2); } // the loop function runs over and over again forever void loop() { } </source> %f 会显示? ==直接对内存操作memset== 原型 void *memset(void *s, int ch, size_t n); char buffer[20]; strcpy(buffer,"1234567890"); memset(buffer,0,sizeof(char)*20); 这时buffer中的数据全都是0了 strcpy(buffer,"1234567890"); memset(buffer+2,6,sizeof(char)*2); 这时buffer值是1266567890 这个函数可以对任何数据类型的内存进行修改。所以有些从串口接收进来的数据需要做一下简单的修改再转发出去的话就可以用这个函数做修改。 先介绍这些吧,再想起来别的再补充 memcpy函数使用起来也不错的,直接把字节数组复制到指定位置了,这个就不说了。 <source lang="cpp"> // the setup function runs once when you press reset or power the board void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); char buffer[20]; strcpy(buffer,"1234567890"); memset(buffer,0,sizeof(char)*20); Serial.println(buffer); strcpy(buffer,"1234567890"); memset(buffer+2,6,sizeof(char)*2); Serial.println(buffer); } // the loop function runs over and over again forever void loop() { } </source> ==字符串分割strtok== 原型 char *strtok(char s[], const char *delim); 分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 ARDUINO 代码复制打印 <source lang="cpp"> char input[16] = "abc,d"; char *p; p = strtok(input, ","); if (p) printf("%s\n", p); p = strtok(NULL, ","); if (p) printf("%s\n", p); </source> 输出: abc d 记住了,只要第一次分割的时候需要指定字符串,之后再分割就用NULL就行了,当p==NULL的时候说明分割完了。这里使用到了指针,此处指针不需要释放。 ==查找字符串 strstr== 原型 char *strstr(const char *str1, const char *str2); strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。 str1: 被查找目标 str2: 要查找对象 char str[]="1234 xyz"; char* str1=strstr(str,"34"); printf("%s",str1); 显示: 34 xyz <source lang="cpp"> // the setup function runs once when you press reset or power the board void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); char str[]="1234 xyz"; char* str1=strstr(str,"34"); Serial.println(str1); } // the loop function runs over and over again forever void loop() { } </source> ==字符串比较 strcmp== 原型:extern int strcmp(const char *s1,const char * s2); 比较s1和s2 两个相等就返回0 不想等就返回非0值。 ==字符串连接strcat== 原型 extern char *strcat(char *dest,char *src); 把src 连接到dest值的后面,注意dest要有足够的空间去接收src否则会出错 ==程序== ==结果== ==视频== |}
返回至
第四十八课--C语言数据处理函数介绍/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息