字符串轉int atoi
函數原型int atoi(const char *nptr);
int val = atoi("12");
這樣va就l等于12
int轉字符串 itoa
函數原型:char*itoa(intvalue,char*string,intradix);
int number=123456;
char string[25];
itoa(number,string,10);
string就是123456 后面的10是說轉化成10進制 16就是轉化成16進制 8就是轉化成8進制 ,也可以轉化成2進制
字符串截取 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 為什么是這個值,能看懂不?自己思考一下。偏移哈。
字符串構造 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,請注意"
直接對內存操作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
這個函數可以對任何數據類型的內存進行修改。所以有些從串口接收進來的數據需要做一下簡單的修改再轉發出去的話就可以用這個函數做修改。
先介紹這些吧,再想起來別的再補充
【2014-04-11 補】
memcpy函數使用起來也不錯的,直接把字節數組復制到指定位置了,這個就不說了。
字符串分割strtok
原型 char *strtok(char s[], const char *delim);
分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
int val = atoi("12");
這樣va就l等于12
int轉字符串 itoa
函數原型:char*itoa(intvalue,char*string,intradix);
int number=123456;
char string[25];
itoa(number,string,10);
string就是123456 后面的10是說轉化成10進制 16就是轉化成16進制 8就是轉化成8進制 ,也可以轉化成2進制
字符串截取 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 為什么是這個值,能看懂不?自己思考一下。偏移哈。
字符串構造 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,請注意"
直接對內存操作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
這個函數可以對任何數據類型的內存進行修改。所以有些從串口接收進來的數據需要做一下簡單的修改再轉發出去的話就可以用這個函數做修改。
先介紹這些吧,再想起來別的再補充
【2014-04-11 補】
memcpy函數使用起來也不錯的,直接把字節數組復制到指定位置了,這個就不說了。
字符串分割strtok
原型 char *strtok(char s[], const char *delim);
分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
ARDUINO 代碼
輸出:
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
字符串比較 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否則會出錯