极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 55770|回复: 28

帮新入门的同学普及下数据处理

  [复制链接]
发表于 2014-4-9 11:33:45 | 显示全部楼层 |阅读模式
本帖最后由 转角 于 2014-4-11 09:15 编辑

最近发现论坛里经常有人问字符串转int、 int转字符串,怎么替换字符这类的问题。咱论坛中确实偏向于硬件,对C语言的熟知不够,现在就给新同学列出几个常用的数据处理、转换的函数,纯C的东西,这些看看书就能学会的,很好找资料,C语言是基础。
字符串转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为分隔符字符串。
  1. char input[16] = "abc,d";
  2.     char *p;
  3.     p = strtok(input, ",");
  4.     if (p) printf("%s\n", p);
  5.     p = strtok(NULL, ",");
  6.     if (p) printf("%s\n", p);
复制代码

输出:
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否则会出错
回复

使用道具 举报

发表于 2014-4-9 11:37:47 | 显示全部楼层
赞  收藏了
回复 支持 反对

使用道具 举报

发表于 2014-4-9 12:32:41 | 显示全部楼层
大赞且收藏。
回复 支持 反对

使用道具 举报

发表于 2014-4-9 13:25:12 | 显示全部楼层
收藏,好东西
回复 支持 反对

使用道具 举报

发表于 2014-4-10 02:01:23 | 显示全部楼层
智能技术交流群142398562 喜欢的可以加一下的哦~~~
回复 支持 反对

使用道具 举报

发表于 2014-4-10 12:04:25 | 显示全部楼层
很好,收藏了。
回复 支持 反对

使用道具 举报

发表于 2014-4-10 13:19:00 | 显示全部楼层
赞一个,呵呵。
回复 支持 反对

使用道具 举报

发表于 2014-4-11 10:14:26 | 显示全部楼层
String comdata='';

int val = atoi(comdata);
为啥不对啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-11 10:40:58 | 显示全部楼层
zerglingbug 发表于 2014-4-11 10:14
String comdata='';

int val = atoi(comdata);

亲,你至少给个值吧 char comdata[]="123"
回复 支持 反对

使用道具 举报

发表于 2014-4-11 10:51:13 | 显示全部楼层
转角 发表于 2014-4-11 10:40
亲,你至少给个值吧 char comdata[]="123"

值是变量咋办啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-11 11:02:56 | 显示全部楼层
zerglingbug 发表于 2014-4-11 10:51
值是变量咋办啊

一样用,你那个帖子里面回复了给你,你去试一下吧。只要你确定你从串口读出来的值是对的就行
回复 支持 反对

使用道具 举报

发表于 2014-4-11 11:12:05 | 显示全部楼层
再来一种
  1. unsigned char hexdata[2];
  2. String temp = "";


  3. sscanf(temp.c_str(), "%02X", &hexdata[n]);
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-4-11 12:08:34 | 显示全部楼层
转角 发表于 2014-4-11 11:02
一样用,你那个帖子里面回复了给你,你去试一下吧。只要你确定你从串口读出来的值是对的就行

亲 研究了半天也弄不出来啊 能不能加个qq咱们 详细交流下。。。
回复 支持 反对

使用道具 举报

发表于 2014-4-17 22:13:07 | 显示全部楼层

赞  收藏了
回复 支持 反对

使用道具 举报

发表于 2014-4-19 01:34:38 来自手机 | 显示全部楼层
好人,又见你传道了
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 15:08 , Processed in 0.048172 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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