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

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

也是了atoi可以转但是存不了那么大的数
展开
 我来答
百度网友b1f2f1e
2013-11-23 · TA获得超过275个赞
知道小有建树答主
回答量:141
采纳率:50%
帮助的人:86.7万
展开全部

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


前两天刚帮另外一个人实现了一个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);

}
百度网友f3b3e02
推荐于2016-08-06 · TA获得超过2156个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:584万
展开全部
#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.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zcdabing
推荐于2016-10-24 · TA获得超过160个赞
知道答主
回答量:79
采纳率:0%
帮助的人:70.2万
展开全部

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

比如:

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

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

更多追问追答
追问
好机智的小伙伴
追答
....
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4bb5d4e
2013-11-23 · TA获得超过121个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:111万
展开全部
char d[5]={"12345"};
int i=0;
i = atoi(d);//再将字符串转成整形
printf("%d\n", i);

输出结果为12345
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海雄风2009
2018-03-14 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2845万
展开全部
#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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式