Unix/Linux环境C编程入门教程(23) 字符数字那些事儿

时间:2022-09-24 12:54:02
1.atoi

包含头文件:

#include <stdlib.h>

函数原型:

int atoi( const char *str );

功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换。

参数str字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。

示例代码:

i = atoi( "512.035" );

i 的值为 512.

2.atol函数

包含头文件:

#include <stdlib.h>

函数原型:

long atol( const char *str );

函数功能:将字符串转换成长整型数并返回结果。函数会扫描参数str字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时才结束转换,并将结果返回。

返回值:返回转换后的长整型数。如果传入的字符串为空,或者字符串包含的内容非阿拉伯数字序列,则函数返回默认值0

示例代码:

x = atol( "1024.0001" );

x的值为1024L.

3.atof函数

所需要的头文件:

#include <stdlib.h>

函数原型:

double atof( const char *str );

函数功能:

将字符串str转换成一个双精度数值并返回结果。 参数str 必须以有效数字开头,但是允许以"E"或"e"除外的任意非数字字符结尾。

返回值:

返回转换后的浮点型数

示例代码:

x = atof( "42.0is_the_answer" );

x的值为42.0.

通过这个3个函数我们是不是发现了什么呢?

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

ato* 型

如果是i 代表int也就是从ascii码值转化成一个int的值,

同理 l 代表转换成一个long型的值,

f代表转换成一个float型的值。

4.Linux中查找这些函数

我们进入到Linux桌面

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

点击在终端中打开

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

在终端中输入 man atoi

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

如下显示的是man中关于atoi atol的介绍

同理我们可以使用man查看atof的介绍 在终端中键入:man atof

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

退出man帮助文档的界面

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

5.小试牛刀

下面我们使用这3个函数写几行有意思的代码加深理解。

#include <stdio.h> //printf scanf
#include <stdlib.h> //atoi atol atof int main(void)
{
char input[32]="4294967299";
int iNum = atoi(input);
float fNum = atof(input);
long lNum = atol(input);
printf("int = %d\nfloat = %f\nlong = %ld\n",iNum,fNum,lNum);
return 0;
}

在RHEL7中打开终端 利用vi创建一个main.c或者在windows上传送进虚拟机

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

回车进入

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

同时按下:键和shift键 进入末行模式 然后输入wq

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

保存并退出之后会到终端的界面

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

下面开始编译 ./itcast运行可执行文件 结果显示出来了

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

慢着 怎么int的值输出3了呢?

思考一下 我们输入的字符4294967296这个数值是太大了

6.数据类型与范围

  1. 超过int的范围 所以一旦数值超过了该数据类型所能表示的范围就会发生溢出

数据模型决定了C语言中基本数据类型与数据宽度的对应关系。我们常用的32位模型称为ILP32,而64位模型有三种:LP64、LLP64和ILP64。在64位模型中,指针一定是64位的,但是int和long的宽度则在不同的数据类型中有不同的定义。

现在的Windows 32和Linux 32是ILP32;Windows x64 版采用的是LLP64模型,Linux64采用的是LP64模型,用gcc编译时可以指定-m32按照ILP32模型进行编译。

数据类型\模型

LP32

ILP32

LLP64

LP64

ILP64

char

8

8

8

8

8

short

16

16

16

16

16

int

16

32

32

32

64

long

32

32

32

64

64

long long

64

64

64

64

64

pointer

32

32

64

64

64

总结:使用一个数据类型的时候我们应该清晰的知道该数据类型的范围能否完全表示这个变量

7.其他环境中效果怎么样呢?

在Solaris x64上

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

在RHEL6 32bit上

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

在MAC x64上

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

Unix/Linux环境C编程入门教程(23)  字符数字那些事儿

通过上述实验我们可发现,不同的操作系统可能对于数据类型的采用也是不一样的。

这对于我们以后要写一个跨多个操作系统的程序提出了警示。

有兴趣的同学可以去研究一下,对应着本文给出的数据类型和模型的对应图去推测各个操作系统的选用数据类型的版本。

Unix/Linux环境C编程入门教程(23) 字符数字那些事儿的更多相关文章

  1. Unix&sol;Linux环境C编程入门教程&lpar;26&rpar; 字符数字那些事儿

    1.gcvt() strtod() strtol() strtoul() toascii() tolower() toupper函数介绍 gcvt(将浮点型数转换为字符串,取四舍五入) 相关函数 ec ...

  2. Unix&sol;Linux环境C编程入门教程&lpar;30&rpar; 字符串操作那些事儿

    函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...

  3. Unix&sol;Linux环境C编程入门教程&lpar;29&rpar; 内存操作那些事儿

    函数介绍 memccpy(拷贝内存内容) 相关函数 bcopy,memcpy,memmove,strcpy,strncpy 表头文件 #include<string.h> 定义函数 voi ...

  4. Unix&sol;Linux环境C编程入门教程&lpar;28&rpar; 日期时间那些事儿

    记得这个专题第一篇我们写过一个程序运行时间的程序,采用库函数提供的clock()模拟做程序测试.本篇介绍的函数也是和时间相关,但是没有clock的细致,而是提供的系统时间和日期. 1.asctime( ...

  5. Unix&sol;Linux环境C编程入门教程&lpar;32&rpar; 环境变量那些事儿

    1. getenv() putenv()setenv()函数介绍 getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdli ...

  6. Unix&sol;Linux环境C编程入门教程(19)Red Hat Entetprise Linux 7&period;0环境搭建

    位架构,包括英特尔X-86_64.Power和s390.动态定时能力将降低内核内部中断数量,Open vSwitch 2.0功能可调节虚拟机之间的流量.RHEL 7中默认的文件系统是XFS,包含了一个 ...

  7. Unix&sol;Linux环境C编程入门教程&lpar;5&rpar; Red Hat Enterprise Linux&lpar;RHEL&rpar;环境搭建

    Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out执行出结果,证明C++程序编译成功,也就说明li ...

  8. Unix&sol;Linux环境C编程入门教程&lpar;4&rpar; Debian Linux环境搭建

    Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 1.广义的Debian是指一个致力于创建*操作系统的合作组织及其作品,由于Deb ...

  9. Unix&sol;Linux环境C编程入门教程&lpar;3&rpar; Oracle Linux 环境搭建

    Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 2010年9月,Oracle Enterprise Linux发布新版内核--Un ...

随机推荐

  1. STOMP协议介绍

    STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息 ...

  2. 用Netty开发中间件:高并发性能优化

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  3. js 倒计时 button不可用

    function showtime() { fun_timedown(5); } function fun_timedown(time) { $("#timedown").val( ...

  4. &lbrack;HIve - LanguageManual&rsqb; Subqueries

    Subqueries in the FROM Clause Subqueries in the WHERE Clause Subqueries in the FROM Clause SELECT .. ...

  5. python3&period;5之mysql扩展

    最近在学习廖雪峰的python3的教程,这是官方http://www.liaoxuefeng.com/,建议大家想学习python的同学可以去看看,真的是在网上能找到的最好文本教程,没有之一 在廖老实 ...

  6. 有关Flash中与Java调用时候注意的一些事项

    1.构建本地拓展的ActionScript库时候要注意SWF文件的版本兼容性: 参考:http://help.adobe.com/zh_CN/air/extensions/WS99209310cacd ...

  7. MySQL服务找不到了,navicat打不开数据库连接

    今天打开Navicat看看连接名,突然发现连接不上了,打开服务发现MySQL服务不见了,所以手动安装了遍MySQL服务. 详细步骤如下: 1.管理员身份打开cmd,切换到MySQL安装目录下的bin目 ...

  8. PHPCMS v9&period;5&period;8-设计缺陷可重置前台任意用户密码

    验证.参考漏洞:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0152291.html 漏洞出现在/phpcms/modules/member/in ...

  9. java 11 增加了一系列的字符串处理方法,Optional 加强 ,改进的文件API

    增加了一系列的字符串处理方法 如以下所示. // 判断字符串是否为空白 " ".isBlank(); // true // 去除首尾空白 " Javastack &quo ...

  10. day 22 面向对象 类与对象 名称空间操作

    一.面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式. 优点:复杂的问 ...