1、函数原型

unsigned long strtoul(const char *nptr,char **endptr,int base )
#define strtoul  simple_strtoul
#define TOLOWER(x) ((x) | 0x20)static unsigned int simple_guess_base(const char *cp)
{  if (cp[0] == '0') {  if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2]))  return 16;  else  return 8;  } else {  return 10;  }
}  unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
{  unsigned long result = 0;  if (!base)  base = simple_guess_base(cp);  if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x')  cp += 2;  while (isxdigit(*cp)) {  unsigned int value;  value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10;  if (value >= base)  break;  result = result * base + value;  cp++;  }  if (endp)  *endp = (char *)cp;  return result;
}
int atoi(const  char *  nptr);
函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串
结束时('\0')才结束转换,并将结果返回。函数说明 atoi()会扫描参返回值:返回转换后的整型数。
附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。

static int atoi(const char* str)
{int result = 0;int sign = 0;if(str != NULL){return -1;}/*遍历直到遇到数字字符*/while (*str==' ' || *str=='\t' || *str=='\n'){++str; }/*处理正负数值*/if (*str=='-'){sign = 1;++str;}else if (*str=='+'){++str;}/*处理数值*/while (*str>='0' && *str<='9'){result = result*10 + *str - '0';++str;}// return resultif (sign==1){return -result; }   else{return result;}}
2、区别--> atoi()只能转换10进制数值,而不能转换十六进制和八进制;atoi的返回值无法区分是正常的返回还是 错误的返回,而strtol可以根据返回值判断是否错误返回。-->strtol参数base 可以为2、10、16进制,base为0时表示函数自动检测进制类型,功能比atoi()强大。
3、用法
int main(int argc, char **argv)
{rw_register_attr rw_reg_info;memset(&rw_reg_info, 0x0, sizeof(rw_register_attr));rw_reg_info.pos = 0;rw_reg_info.size = 8;if(argc <5){printf("usage: nvp6324 <flag 0:read,1:write> <dev> <bank> <addr> <val> <pos> <size> \n");printf("sample: nvp6324 0 0 0 0x08 \n");printf("sample: nvp6324 1 0 0 0x08 1\n");return 0;}rw_reg_info.flag = strtoul(argv[1], NULL, 0);if(rw_reg_info.flag == 0 && argc == 5){rw_reg_info.dev = strtoul(argv[2], NULL, 0);rw_reg_info.bank = strtoul(argv[3], NULL, 0);rw_reg_info.addr = strtoul(argv[4], NULL, 0);}else if(rw_reg_info.flag == 1 && argc == 6){rw_reg_info.dev = strtoul(argv[2], NULL, 0);rw_reg_info.bank = strtoul(argv[3], NULL, 0);rw_reg_info.addr = strtoul(argv[4], NULL, 0);rw_reg_info.val = strtoul(argv[5], NULL, 0);}else if(rw_reg_info.flag == 1 && argc == 8){rw_reg_info.dev = strtoul(argv[2], NULL, 0);rw_reg_info.bank = strtoul(argv[3], NULL, 0);rw_reg_info.addr = strtoul(argv[4], NULL, 0);rw_reg_info.val = strtoul(argv[5], NULL, 0);rw_reg_info.pos = strtoul(argv[6], NULL, 0);;rw_reg_info.size = strtoul(argv[7], NULL, 0);;}int m_fd_jaguar1 = -1;if(m_fd_jaguar1 < 0){m_fd_jaguar1 = open(NVP6324_DEV_NODE, O_RDWR | O_NOCTTY| O_NONBLOCK);if (m_fd_jaguar1 < 0) {printf("nextchip dev open failed\n");return -1; }}ioctl(m_fd_jaguar1, IOC_RW_REGISTER, &rw_reg_info);printf("[NVP6324]flag=%d dev=%d bank=%d addr=0x%x val=0x%x\n", rw_reg_info.flag, rw_reg_info.dev, rw_reg_info.bank, rw_reg_info.addr, rw_reg_info.val);close(m_fd_jaguar1);return 0;
}

atoi() 和strtol区别和用法相关推荐

  1. linux c atoi strtol 区别

    atoi和strtol函数均是把字符串转换成整数,两者的不同点主要是: 1,atoi的返回值无法区分是正常的返回还是错误的返回,如: int val; val = atoi("abc&quo ...

  2. atoi和strtol的区别和使用

    atoi和strtol函数均是把字符串转换成整数,两者的不同点主要是: 1,atoi的返回值无法区分是正常的返回还是错误的返回,如: int val; val = atoi("abc&quo ...

  3. model.fit以及model.fit_generator区别及用法

    model.fit以及model.fit_generator区别及用法_猫爱吃鱼the的博客-CSDN博客

  4. js中!和!!的区别及用法

    js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...

  5. Python中threading的join和setDaemon的区别及用法 例子

    Python中threading的join和setDaemon的区别及用法 Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ...

  6. MySQL笔记10:engine=innodb和engine=myisam的区别和用法!

    MYSQL中engine=innodb和engine=myisam的区别和用法! 区别 1.myisam类型不支持事务处理等高级处理,而innodb类型支持. 2.myisam类型的表强调的是性能,其 ...

  7. calloc、malloc、realloc函数的区别及用法

    calloc.malloc.realloc函数的区别及用法! 三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异. (1)malloc函数.其原型void *malloc(unsig ...

  8. 多线程:synchronize、volatile、Lock 的区别与用法

    Java多线程之内存可见性和原子性:Synchronized和Volatile的比较 在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型. (1)Java所有变量都存储在主内存中   ...

  9. 转 Java中final、finally、finalize的区别与用法

    Java中final.finally.finalize的区别与用法 1.简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构 ...

最新文章

  1. 创建topic验证kafka集群
  2. jQuery笔记---选择器
  3. 白话科普系列——双十一,竟然是一场有“预谋”的DDoS攻击?
  4. [导入]Ajax初试
  5. 【视频教程】JEECG 入门视频教程
  6. mysql 条件查询分页_百万数据下mysql条件查询及分页查询的注意事项
  7. 利用反射判断初始化后的对象所有属性是否为空判断对象指定属性是否为空
  8. 01 牛顿迭代公式
  9. alt复制选区就会卡 ps_10个小技巧解决运行PS卡死了的问题
  10. linux 虚拟机不能启动不了系统,群晖VMM虚拟机安装Linux系统无法启动桌面的解决办法...
  11. java 转换成大写_java实现将数字转换成人民币大写
  12. c语言输出字母空心菱形,C语言实现打印菱形和空心菱形
  13. 网页中图片显示不出来,解决网页中图片不能显示的方法
  14. 51单片机用lcd1602显示两行字符串
  15. 人工智能学习笔记(三)有信息搜索
  16. 高并发其实挺容易的,当你明白了一万并发的原理,然后扩展到百万、千万、亿万级很easy
  17. 如何用Python网络爬虫爬取网易云音乐歌曲
  18. 【综合】hosts文件位置
  19. 数据库安全性 --- 控制
  20. 关于Python 的“多元”赋值

热门文章

  1. 从再见Borland说起
  2. IDEA2019运行PHP项目
  3. 3.5寸1.44M软盘结构
  4. linux下嵌入式系统,嵌入式linux系统应用领域?这里详细告诉你
  5. kubernetes上节点node.kubernetes.io/disk-pressure:NoSchedule污点导致pod 被驱逐
  6. [IOS APP]翟鸿燊演讲精选-有声国学系列1
  7. 关于取出关键词并且计算出相关长度
  8. 兰彻斯特平方定律 matlab,兰彻斯特模型
  9. Qt小玩意儿——变色魔法阵(QPainter的部分应用)
  10. TP 中的gt egt lt elt