c语言atoi与itoa用法以及超过long long int 型变量整数加减法

c语言atoi与itoa用法以及超过long long int 型变量整数加减法,第1张

整数的计算可以通过模运算来进行简化,也可以将其作为字符串读入,然后分段运算之后再进行拼接。

附:

atoi和itoa的示范代码如下:

#include

<stdlibh>

#include

<stdioh>

void

main(

void

)

{

char

s;

int

ix;

char

buffer[20];

int

i

=

3445;

long

l

=

-344115L;

unsigned

long

ul

=

1234567890UL;

s

=

"

-9885

pigs";

/

Test

of

atoi

/

ix

=

atoi(

s

);

printf(

"atoi

test:

ASCII

string:

%s\t\tinteger:

%d\n",

s,

ix

);

_itoa(

i,

buffer,

10

);

printf(

"String

of

integer

%d

(radix

10):

%s\n",

i,

buffer

);

_itoa(

i,

buffer,

16

);

printf(

"String

of

integer

%d

(radix

16):

0x%s\n",

i,

buffer

);

_itoa(

i,

buffer,

2

);

printf(

"String

of

integer

%d

(radix

2):

%s\n",

i,

buffer

);

_ltoa(

l,

buffer,

16

);

printf(

"String

of

long

int

%ld

(radix

16):

0x%s\n",

l,

buffer

);

_ultoa(

ul,

buffer,

16

);

printf(

"String

of

unsigned

long

%lu

(radix

16):

0x%s\n",

ul,

buffer

);

}

输出结果:

atoi

test:

ASCII

string:

-9885

pigs

integer:

-9885

String

of

integer

3445

(radix

10):

3445

String

of

integer

3445

(radix

16):

0xd75

String

of

integer

3445

(radix

2):

110101110101

String

of

long

int

-344115

(radix

16):

0xfffabfcd

String

of

unsigned

long

1234567890

(radix

16):

0x499602d2

#include <stdlibh>

int atoi(const char nptr);

long atol(const char nptr);

long long atoll(const char nptr);

long long atoq(const char nptr);

linux下面没对应的好像,我man 没有查到

给你直接找到一个实现,你放到自己代码里面就可以了

void itoa ( unsigned long val, char buf, unsigned radix )

{

char p; / pointer to traverse string /

char firstdig; / pointer to first digit /

char temp; / temp char /

unsigned digval; / value of digit /

p = buf;

firstdig = p; / save pointer to first digit /

do {

digval = (unsigned) (val % radix);

val /= radix; / get next digit /

/ convert to ascii and store /

if (digval > 9)

p++ = (char ) (digval - 10 + 'a '); / a letter /

else

p++ = (char ) (digval + '0 '); / a digit /

} while (val > 0);

/ We now have the digit of the number in the buffer, but in reverse

order Thus we reverse them now /

p-- = '\0 '; / terminate string; p points to last digit /

do {

temp = p;

p = firstdig;

firstdig = temp; / swap p and firstdig /

--p;

++firstdig; / advance to next two digits /

} while (firstdig < p); / repeat until halfway /

}

因为字符型计算时以ASCII码来计算,0的ASCII码是48,把一个整数(0~9之间的整数)加上'0'(字符0,实际上就是ASCII码值),得到对应数字的ASCII码值,也就是转为字符型了。

供参考:

#include<stdioh>

//2 <= base <= 36

#define MAX_INTEGER_BIT 33

char itos_base(int n, int base)

{

static char res[MAX_INTEGER_BIT];

for (int i = 0; i < MAX_INTEGER_BIT; i++)

{

res[i] = 0;

}

int index = MAX_INTEGER_BIT - 2;

do

{

res[index--] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base];

n /= base;

} while (n > 0);

return res + index + 1;

}

char itos(int n)

{

return itos_base(n, 10);

}

int  main() 

{

printf("%s\n", itos(1234567));

printf("%s\n", itos(0));

printf("%s\n", itos(99));

return 0;

}

运行截图

你这程序有问题,是不是抄错了?

============================

#include<stdioh>

void itoa16(int a,char p[])

{ int i=0,j=0,k,r,t[10];

if(a<0) {p[j++]='-';a=-a;}

p[j++]='0';p[j++]='x';

while(a>0)

{ r=a%16;

if(r<10) t[i]=r+'0';

else t[i]=r-10+'A';

a=a/16;

i++;

}

for(k=i-1;k>=0;k--,j++) p[j]=t[k];

p[j]='0';

}

main()

{ char a=127,b[10]="";

itoa16(a,b);

puts(b);

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12157489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存