将int数组与字符串中的数字互转的方法

 在linux中有许多时候我们需要将int数组转换为字符数组,或者字符串,但是没有itoa之类的函数怎么办?

 下面有几种int数组与字符串互转的方法,以及一些需要注意的小的细节。
int main(){
    int *arry= NULL;
    arry = malloc(128);
    memset(arry,0x0,128);

    char str[] = "0,1,2,3,4,6,7,8,9,10,11,12,13,1";
    char delimes[] = ",";
    char *result = NULL;
    int i = 0;
    int j = 0;
    char tmp[256] = {0};

    /*将字符串转化为int数组*/
    result = strtok(str+1,delimes);
    while(result != NULL){
        arry[i] = atoi(result);
        i++;
        result = strtok(NULL,delimes);

    }

    for(j = 0; j < 32; j++)
    {
        printf("arry[%d]=%d\n",j,arry[j]);
    }
    /*将int数组转化为字符串(还原原来的字符串),有两种方法*/

    /*第一种很麻烦,但有利于我们理解数字和字符之间的转化*/
    int index,in  = 0,
    for(index = 0; index < 32; index++){
        /*没错,当这个数字小于10的时候,加'0'其实就是ASCII值*/
        if(arry[index] < 10)
        {
            tmp[in] = arry[index] + '0';    
        }
        /*当这个数字大于10的时候,直接加'0'的ASCII值是“:”,此时将得不到想要的10
         *所以要用两部分来存储,第一部分用一个字节存储十位,第二部分用一个字节存储个位
         *
        */
        else if(arry[index] >= 10 && arry[index] < 100){
            // sprintf(tmp+in, "%d", arry[index]);  //此时只能
            tmp[in] = arry[index]/10 + '0';
            in = in + 1;
            tmp[in] = arry[index]%10 + '0';
        }
        in = in+1;
        tmp[in] = ',';
        in = in+1;      
    }
    /*第二种比较简单的方法,直接用字符串进行拼接*/
    char tmppp[8] = {0};
    for(index = 0; index < 32; index++){
        strcat(tmp,",");
        sprintf(tmppp, "%d", arry[index]);
        strcat(tmp,tmppp);  
    }

    /*printf输出的小细节*/

    in = 0;
    sprintf(tmp+in, "%d", 1);// 1转化为字符串以字符存储时需要占用一个字节
    /*tmp[in+1] = '0'- 48; 可以用来验证printf遇到字符ASCII值为0时会停止输出*/
    in = in + 2;
    tmp[in] = ';';

    printf("%s\n",tmp);     // 此处是1,为什么不是1;呢?原因是printf遇到字符ASCII值为0时会停止输出  
    printf("c=%d\n",tmp[1]);// 0
    printf("c=%d\n",tmp[2]);// 59

    in = 0;
    sprintf(tmp+in, "%d", 12);// 12转化为字符串以字符存储时需要占用两个字节
    printf("tmp[%d]=%02x\n",in,tmp[in]);     // 字符1 = 十六进制的31  =  十进制的49
    printf("tmp[%d]=%02x\n",in+1,tmp[in+1]); // 字符2 = 十六进制的32  =  十进制的50
    in = in + 2;
    tmp[in] = ';';

    printf("%s\n",tmp);     // 12;
    printf("c=%d\n",tmp[0]);// 49
    printf("c=%d\n",tmp[1]);// 50
    printf("c=%d\n",tmp[2]);// 59

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值