• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

怎么在C语言中实现对数组的进制转换

shijielong 2019-04-07 浏览量:1955

怎么在C语言中实现对16进制的数组转换成10进制的数组,比如我的16进制数组a[20],通过函数转换,输出10进制的b[20]数组,网上找的只能实现单个数据的转换,数组不行。

360截图20190407172847842.jpg

#include<stdio.h>
long fun(char*s);
#define N 50
void main() 
{
 long m;
 char s[N];
 //while(1)
 //{
printf("输入十六进制数:"); 
int a[20]={122F3A425F6A708A9110};
b[20]=fun(a[20]); 
printf("十进制数为:%ld\n"b[20]); 
} 
//}

long fun(char*s) 
{ 
 int it;
 long sum=0; 
 for(i=0;s[i];i++)
{ 
 if(s[i]<='9')
 t=s[i]-'0'; 
 else t=s[i]-'a'+10;
 sum=sum*16+t; 
 } 
 return sum;
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 没有搞明白你到底要干什么?

    计算机内部都是存储、处理二进制数据的,无论十六进制表示还是十进制数的表示,其实在内存中都是二进制的。

    除了(站点逗号bug外),你的程序本身也有很多问题,比如char数组的初始化不能你那样写的,你的程序编译都不能通过的。

    就是你用图形给出的程序也是有问题的的。此外,20位16进制数据数字符串,理论上转换出来的数,在20位10进制数字符串中是不能完全装下的。

    不考虑溢出,大致可以这样把16进制数据数字符串转换成一个整数(不考虑符号位)


    #include "stdio.h"
    unsigned long long hChar2ul(char str){
    /* 把一个十六进制字符转换成数字 */
    unsigned long long out=0;
    if(str>='a' && str<='f'){
    out = str - 'a' + 10;
    } else if(str>='A' && str <= 'F'){
    out = str - 'A' + 10;
    } else{
    out = str - '0';
    }
    return out;
    }

    unsigned long long hStr2ul( char *str unsigned long long len){
    /* 把一个十六进制字符串转换成无符号长整数,len < 16 (64位系统中) */
    unsigned long long out=0;
    unsigned long long i=0;
    out= hChar2ul( str[0] );
    for (i=1;i<len;i++){
    out = out * 16 + hChar2ul ( str[i] );
    }
    return out;
    }

    int main(){
    char s[17]={'F''0''f''a' 'c''8''F''0' 'F''E''B''d' '7''5''2''1' 0};
    unsigned long long g = hStr2ul( s 16 );
    printf("0x%s=%lX=%lu\n" sgg);
    }


    • 发布于 2019-04-08
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:5
  • 第一个错误,16进制前面需要加0x,

    第二编译器里面16进制和10进制是通用的所以不需要转换

    你这个函数里面错误太多了,还有就是fun函数是指针参数,只要用a就可以了,不用a[20]

    • 发布于2019-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 1、你的这个fun是没有必要的。
    printf可以直接转换,不用加函数
     %d是输出10进制,%x是输出16进制
    2、你的a[20]有20个成员,是从a[0]~a[19]没有a[20]
    3、你的a[20]一个是不存在,一个是没有赋值。你定时a[20]时,只初始化了前几个数据,而且赋值时的写法不对,16进制的数据要写成0x8A

    • 发布于2019-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 输出10进制,你用printf的方式就可以输出的啊,使用%d的方式,而prihtf 是输出在屏上的命令行里的,你的真正的功能是怎么样的呢,要说详细了

    还有数组的定义与使用也不对,没有a[20]这个数

    • 发布于2019-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • C语言里面保存的变量其实没有十进制还是十六进制这种说法的,对于存储器来说,它只有高低电平

    因此这里你实际上想实现的功能是将这个数以10进制的形式打印出来

    这里可以不用printf一个字符串,而是改为%d,每次输出一个字符,再加个for循环

    还有,你的程序里面有几个BUG,a[20]是不存在的,这个下标只能是0-19

    然后以16进制定义数据时,要在前面加0x,不然默认是10进制的

    • 发布于2019-04-08
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

怎么在C语言中实现对数组的进制转换