C语言字符串类型转换为整型或浮点怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言字符串类型转换为整型或浮点怎么做相关的知识,希望对你有一定的参考价值。

举个简单的应用的例子,我看有的是用函数直接转换,
我的字符串数据是结构体数组某元素的某成员是字符数组,
此外还有个问题,我的字符串有的数据比较大,位数占的比较多比如说
有个字符数组a[15]="1346244049985",我必然是要把它转换为整型,怎么转换?怎么存储?
可就算可以转换也没办法存储到整型里面= =
能否将13或是14位的字符数组转换并存储成整型
我试了强制转换
char a[] ="1346244049985";
__int64 b;
b = (__int64)a;
printf("b=%I64d", b);
但是不行,好像连转都不行

也是了atoi可以转但是存不了那么大的数

大数的形式转换,需要自己实现一个扩展方式。


前两天刚帮另外一个人实现了一个100位以内十进制数字符转16进制的实现:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define isdigit(c) ('0' <= (c) && (c) <= '9')

#define MAX_DIGI_NUM 100

int _div_16(char *big_num, int *p_size)

    int to_div = 0;
    char *div = big_num;
    int num_size;
    char *quo;
    int rem = 0,quo_size = 0;;

    while(0 == *(div))div++; (*p_size)--;
    num_size = *p_size;
    if(num_size == 0 || num_size == 1)
        *p_size = 0;
        rem = div[0];
        div[0] = 0;
        return rem;
    
    quo = malloc(num_size);
    memset(quo,0,num_size);

    while(num_size>0)
        to_div = rem*10 + *div;
        quo[quo_size] = to_div/16;
        rem = to_div%16;
        quo_size++;
        num_size--;
        div++;
    

    memcpy(big_num,quo,quo_size);
    *p_size=quo_size;
    free(quo);
    return rem;



int main()

    char input[MAX_DIGI_NUM] = 0;
    char num[MAX_DIGI_NUM+1] = 0;
    char hex[MAX_DIGI_NUM+1] = 0;
    int i,num_size,result;

    printf("input Dec num:");
    scanf("%s",input);
    memcpy(num,input,MAX_DIGI_NUM);
    i = num_size = strlen(num);
    if(i >= MAX_DIGI_NUM)
        printf("input num is too big!\\n");
        return 0;
    

    while(i--)
        if(!isdigit(num[i]))
            printf("input num is not valid!\\n");
            return 0;
        
        num[i] = atoi(&num[i]);
    

  char *tmp = &hex[MAX_DIGI_NUM];
  while(num_size)
  
  result = _div_16(num, &num_size);
  tmp--;
  if(result <= 9)
  *tmp = 0x30 + result;
  else
  *tmp = 0x60 + result-9;
  

    printf("Hex num is 0x%s\\n",tmp);

参考技术A #include <stdlib.h>
double atof( const char *str );
功能:将字符串str转换成一个双精度数值并返回结果。 参数str 必须以有效数字开头,但是允许以“E”或“e”除外的任意非数字字符结尾。例如:

x = atof( "42.0is_the_answer" );

x的值为42.0.

#include <stdlib.h>
int atoi( const char *str );
功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换并将结果返回。例如,
i = atoi( "512.035" );

i 的值为 512.
参考技术B

嫌麻烦就用  atoi,不然就自己编

比如:

char a[5]="54321";
char a0=a[0];
int p=a0-'0';

p就等于5了,其余类似,组在一起可以用 pow,不嫌麻烦自己编个M的N次方函数

追问

好机智的小伙伴

追答

....

追问

可就算可以转换也没办法存储到整型里面= =

能否将13或是14位的字符数组转换并存储成整型

我试了强制转换

char a[] ="1346244049985";

__int64 b;

b = (__int64)a;

printf("b=%I64d", b);

但是不行,好像连转都不行


也是了atoi可以转但是存不了那么大的数

追答char a[14]="3894923498323";
 int b[13];
 for(int i=0;i!=13;++i)
 
  b[i]=a[i]-'0';
  cout<<b[i];
 
 double res=0;
 for(int i=13;i!=0;--i)
 
  res+=b[i]*pow(10.0,13-i);
 

输出没错啊


 

本回答被提问者采纳
参考技术C char d[5]="12345";
int i=0;
i = atoi(d);//再将字符串转成整形
printf("%d\n", i);

输出结果为12345
参考技术D #include <stdio.h>

#include <sys/types.h>

#include <stdlib.h> //Only she can resolve this problem 
 
int main(void)

        char *str =  "4000000000";

        int64_t a = 0;

        a = atoll(str);

        printf("a = %lld\\n", a);
        printf("a = %llu\\n", a);

a = 886677774000000000
a = 886677774000000000

c语言中如何将一个字符ascii码转换为整型数

#include"stdio.h"
#include"string.h"
main()

int i,s;
int num[80];
char str[80],ch[80];
i=0;
s=0;
printf("input a string:");
gets(str);
while(str[i]!='\n')

i++;

str[i]='\0';
for(i=0;i<80;i++)
if(str[i]>='0'&&str[i]<='9')

ch[i]=str[i]-'0';
num[i]=ch[i];
s=s*10+num[i];

printf("%d",s);
printf("\n");
getch();

c语言中,字符ascll码是通过控制其输出格式来把它转化为整型数的,格式控制中"%c",就是将其以字符形式输出,而直接改成"%d",就可以将其转换为整型数。

ASCII码,英文全称:American Standard Code for Information Interchange,是美国信息交换标准代码是一种用于信息交换的美国标准代码。7位字符集广泛用于代表标准美国键盘上的字符或符号。通过将这些字符使用的值标准化,ASCII允许计算机和计算机程序交换信息。ASCII字符集是与ANSI字符集中的前面128个(0-127)字符相同。

美国信息交换标准代码ASCII为"美国信息交换标准代码"十个字对应英文的缩写,ASCII文件是简单的无格式文本文件,可以由任何计算机所识别,Windows中的记事本及任何文字处理程序都可以阅读及创建ASCII文件。ASCII文件通常都具有扩展名.TXT(例如README.TXT)

在计算机中,所有的数据在存储和运算时都要使用二进制数表示,同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的美国信息交换标准码,统一规定了上述常用符号用哪个二进制数来表示。
参考技术A 删掉ch[i]这个步骤就可以了
ch[i]=str[i]-'0';
num[i]=ch[i];
s=s*10+num[i];
改成
num[i]=str[i]-'0';
s=s*10+num[i];
参考技术B str[i]-'0'这不就转了吗,直接减去'0'(字符)追问

可是运行结果有错啊?

追答

你那是赋值错误,你把整数赋值给了ch[i],你直接打印出来str[i]-'0'看看

参考技术C while(str[i]!='\n')
这里改成 while(str[i]!='\0')
参考技术D for循环的错误,不能让他加到80.i<strlen(str);并且gets的用法也有错误,它会直接加‘\0’,不用自己加吧
你的程序写的有点繁琐

#include"stdio.h"
#include"string.h"
main()

int i,s;
char str[80];
i=0;
s=0;
printf("input a string:");
gets(str);

for(i=0;i<strlen(str);i++)
if(str[i]>='0'&&str[i]<='9')


s=s*10+str[i]-'0';

printf("%d",s);
printf("\n");
getchar();
本回答被提问者采纳

以上是关于C语言字符串类型转换为整型或浮点怎么做的主要内容,如果未能解决你的问题,请参考以下文章

江哥带你玩转C语言 | 14 - 结构体-枚举-共用体

python数据类型的转换

C语言类型转换

类型转换

C语言中关于字符串转整型?

[C/C++笔面试]不使用库函数将字符串转换为整数