我是靠谱客的博主 炙热人生,最近开发中收集的这篇文章主要介绍十六进制转十进制的C语言实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

嘻嘻,用到了前几天学到的循环队列,认识到了数据结构的魅力。
将输入的数据入队后,再挨个出队,首先检查队列的前两个数据是否为‘0x’
若是,再将其他数据出队,并且完成一系列操作。

//————————————————————————
//十六进制转十进制(队列)
#include <stdio.h> 
#define maxSize 10
int product2(int n);
int word2num(char w);
int hTod(char a[]);
struct xQueue {
char data[maxSize];
int front, rear;
int length;//表示队列长度
};
int main() {
char a[50];
gets(a);
printf("%dn",hTod(a));
}
int hTod(char a[]) {
char c, b, d;
int num = 0, numDem = 0;
struct xQueue que;
que.front = 0; que.rear = 0;
que.length = 0;//初始化循环队列
char *p = a;
while (*p != '') {
if (que.front == (que.rear + 1) % maxSize)
return -1;//队列满
else {
que.rear = (que.rear + 1) % maxSize;
que.data[que.rear] = *p++;
que.length++;
}
}
que.front = (que.front + 1) % maxSize;
c = que.data[que.front];
que.length--;
if (c == '0') {
que.front = (que.front + 1) % maxSize;
b = que.data[que.front];
que.length--;
if (b != 'x')
return -2;//表示输入不是十六进制
}
else
return -2;
while (que.front != que.rear) {
que.front = (que.front + 1) % maxSize;
d = que.data[que.front];
if (d >= 'A' && d <= 'F')
num = word2num(d);
else if (d >= '0' && d <= '9')
num = d - '0';
else
return -3;//表示不符合十六进制的格式
que.length--;
numDem = numDem + num*product2(que.length);
}
return numDem;
}
int word2num(char w) {
int num;
switch(w) {
case 'A': num = 10; break;
case 'B': num = 11; break;
case 'C': num = 12; break;
case 'D': num = 13; break;
case 'E': num = 14; break;
case 'F': num = 15; break;
default:num = -1;
}
return num;
}
int product2(int n) {
if (n == 0)
return 1;
else if (n == 1)
return 16;
else
return 16 * product2(n-1);
}

最后

以上就是炙热人生为你收集整理的十六进制转十进制的C语言实现的全部内容,希望文章能够帮你解决十六进制转十进制的C语言实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部