当前位置:首页 » 操作系统 » atoi源码

atoi源码

发布时间: 2024-09-06 16:52:57

❶ 函数解析linuxatoi函数的秘密linuxatoi

Linux atoi函数是一种常见的C/C++内置函数,它可以解析字符串并把它们转换为整型数字。它的 API 风格(应用程序编程接口)主要包括:扰激
int atoi(const char * str);
我们可以通过上面的 API 把一个字符串转换成整数。然而,正如我们所知,atoi() 内部实现的秘密是什么?
要了解 atoi() 函数的实现,我们可以看 Linux 核心源码,这是启棚一种 C 函数,它可以在核心代码库中找到:
// atoi 函数定义
int atoi(const char * str)
{
int v;
char *endptr ;
// 初始化
v=strtol( str, &endptr, 10);
// 检查失败
if( (errno == ERANGE && (v == LONG_MAX || v == LONG_MIN))
|| (errno !=0 && v ==0) ) {
errno = EINVAL;
return 0;
}
if(endptr == str)
return 0;
// 成功,返回 v 的值
return v;
}
atoi() 函数的内部实现完全得益于 strtol() 函数,它是一个受信任缓旁袜的库函数,可以安全的把字符串转换成 LONG 类型的数字,假定字符串可以有效的表达数字。另外, strtol() 函数可以转换任何整型字符串,例如 16 进制和 8 进制,而 atoi() 只能处理 10 进制。
总而言之,atoi() 函数底层实现的秘密就是 strtol() 函数,它可以安全的将字符串转换成 LONG 类型的数字,假定字符串可以有效的表达数字。这个函数的参数还可以指定字符串的基数,例如 8 进制和 10 进制。最后,将转换后的数字返回给 atoi() 函数,并将其作为整数返回给程序。

❷ 用C++编一个和atoi功能一样的函数,实现字符到整形的转换

下面是实现功能的代码,函数的逗斗名字是myAtoi

int myAtoi (const char *value) {
register int ret, i, signFlag;
ret = i = 0;
signFlag = 1;

while ((*(value + i)) != 0x00) {
if ((*(value + i)) == 0x2d) {
signFlag = -1;
}
else if ((*(value + i)) >= 0x30 && (*(value + i)) <= 0x39) {
ret *= 10;
ret += ((int)(*(value + i)) - 48);
}
else if (
(ret != 0) &&
((*(value + i)) < 0x30 || (*(value + i)) > 0x39)
) {
return (ret * signFlag);
}

i += 1;
}

return (ret * signFlag);
}

如果是想测试,就用下面的代码
#include<stdio.h>
int myAtoi (const char *value) {
register int ret, i, signFlag;
ret = i = 0;
signFlag = 1;

while ((*(value + i)) != 0x00) {
if ((*(value + i)) == 0x2d) {
signFlag = -1;
}
else if ((*(value + i)) >= 0x30 && (*(value + i)) <= 0x39) {
ret *= 10;
ret += ((int)(*(value + i)) - 48);
}
else if (
(ret != 0) &&
((*(value + i)) <猜指培 0x30 || (*(value + i)) > 0x39)
) {
return (ret * signFlag);
}

i += 1;
}

return (ret * signFlag);
}
int main () {
char ch1[] = "-100";
char ch2[] = "穗唯- 034g1234";
char ch3[] = "";

printf (“%d\n%d\n%d\n", myAtoi (ch1), myAtoi (ch2), myAtoi (ch3));

return 0;
}

❸ 求C++获取系统时间源代码,精确到毫秒

#include <iostream>
#include <windows.h>

using namespace std;

void main()
{

SYSTEMTIME time;//时间结构声明,这个结构是系统的,
GetSystemTime( &time );//调用获取系统时间api.
//GetLocalTime();这个函数是获取本地时间api
char* t_y;
char* t_m;
char* t_h;
char* t_Min;
char* t_s;
char* t_Mi;
char* t_d;
char* t_w;

SYSTEMTIME time;//时间结构声明,这个结构是系统的,
GetSystemTime( &time );//调用获取系统时间api.
sprintf(t_y, "%d", time.wYear);//将年份格式输出到t_y变量中
sprintf(t_m, "%d", time.wMonth);
sprintf(t_w, "%d", time.wDayOfWeek);
sprintf(t_d, "%d", time.wDay);
sprintf(t_h, "%d", time.wHour);
sprintf(t_Min, "%d", time.wMinute);
sprintf(t_s, "%d", time.wSecond);
sprintf(t_Mi, "%d", time.wMilliseconds);
printf("%s,%s,%s,%s,%s,%s,%s,%s",
time.wYear,
time.wMonth,
time.wDayOfWeek,
time.wDay,
time.wHour,
time.wMinute,
time.wSecond,
time.wMilliseconds);

}
/***
SYSTEM 结构成员如下:
SYSTEMTIME STRUCT
{
WORD wYear ; 年
WORD wMonth ;月
WORD wDayOfWeek ;星期,0=星期日,1=星期一...
WORD wDay ;日
WORD wHour ;时
WORD wMinute ;分
WORD wSecond ;秒
WORD wMilliseconds ;毫秒
}SYSTEMTIME ENDS
//***/

c语言中怎么把字符串中连续的数字变成一个数

C语言库函数名: atoi
功 能: 把字符串转换成整型数.
名字来源:array to integer 的缩写.
函数说明: atoi()会扫描此粗郑参数nptr字符串,如果第一个字符不森颂是数字也不是正负号返回零,否则开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整凳握型数。
原型: int atoi(const char *nptr);
需要用到的头文件: #include <stdlib.h>
程序例:
1)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
执行结果
string = 12345.67 integer = 12345
2)
#include <stdlib.h>
#include <stdio.h>
int main()
{
char a[] = "-100" ;
char b[] = "123" ;
int c ;
c = atoi( a ) + atoi( b ) ;
printf("c = %d\n", c) ;
return 0;
}
执行结果
c = 23
简单的实现atoi函数的源代码:
int my_atoi(const char *str){
int result = 0;
int signal = 1; /* 默认为正数 */
if((*str>='0'&&*str<='9')||*str=='-'||*str=='+'){
if(*str=='-'||*str=='+'){
if(*str=='-')
signal = -1; /* 输入负数 */
str++;
}
}
else return 0;
/* 开始转换 */
while(*str>='0'&&*str<='9')
result = result*10+(*str++ -'0');
return signal*result;
}

❺ c语言atoi函数源代码

c语言atoi函数源代绝禅码:
int atoi(char n[])
{int i,y=0;
for(i=0;n[i]>='0'悔好 && n[i]<='9';i++)
y=y*10+n[i]-'碧宏铅0';
return y;
}

❻ 如何用c语言实现atoi函数

要善用网络。。。网络就有atoi这个词条,里面有c语言实现的源代码(其实是c++,不过唯一的不同只是它的字符串定义为了const,即常量,表示在函数里不允许改变此字符串内容)
我在这里加上注释简单说明一下该源码
int
my_atoi(const
char
*str){
int
result;
//保存返回结果的
int
signal
=
1;
//保存符号的,默认正数
//判断第一个数字是否合法
if((*str>='0'&&*str<='9')||*str=='-'||*str=='+'){
//如果是-,符号变为-1,指针右移
//如果是+,指针右移(总之指向了第一个数字)
if(*str=='-'||*str=='+'){
if(*str=='-')
signal
=
-1;
str++;
}
}
else
return
0;//第一个不是+,-或数字,非法返回0
//这里就是转换,是数学的问题就不解释了
while(*str>='0'&&*str<='9')
result
=
result*10+(*str++
-'0');
return
signal*result;
}
不过这个程序,如果字符串是非法的话,他也会返回直到非法字符之前的数值
比如123abc
返回值就是123

热点内容
不同的语言编译原理 发布:2024-11-25 01:30:37 浏览:315
c编译成c 发布:2024-11-25 01:29:12 浏览:105
飞腾编译gcc 发布:2024-11-25 01:28:32 浏览:153
服务器文档设备存储需要检查什么 发布:2024-11-25 01:27:10 浏览:342
名词算法 发布:2024-11-25 01:24:54 浏览:675
我的电脑玩cf卡该换什么配置 发布:2024-11-25 01:20:38 浏览:871
云加密服务是什么情况 发布:2024-11-25 01:18:16 浏览:881
租云服务器会提供ip吗 发布:2024-11-25 01:18:13 浏览:451
安卓原生刷机包在哪里下载 发布:2024-11-25 01:13:16 浏览:298
安卓怎么改字体 发布:2024-11-25 01:12:32 浏览:477