c语言 十六进制 转换

最简单的使用scanf()函printf()函数进式转换,以16进制格式输入,再以10进制格式输出。

程序代码如下:

#include<stdio.h>

int main()

{

int a=0;

int i=0;

scanf("%x",&a);

printf("%d",a);

return 0;

运行结果:

扩展资料:

scanf函数与printf函数的用法很像,都是以格式化的形式进行操作,例如上述程序中scanf("%x", &a);就是将输入数据以十六进制格式存储到变量a中。

"%x"是将字符串A23CD以十六进制形式输入a中,如果将"%x"换成为"%d"的话,就是将字符串A23CD以十进制形式输入a中,这显然是错误的,因为将A23CD转换为十进制的时候,无法解析A,CD等字符,所以得出的结果就是错误的。

上面哥真有啊
#include<stdio.h>
void
main()
{
long
n;
printf("Please
input
a

number:\n");
scanf("%lx",&n);
printf("十六进制转换为十进制\n");
printf("%ld",n);
printf("\n");
}

一、问题描

十进制数是指各字全部由小于10的数字(0..9成的数值,如123、45678等。十六进制数是指各位数字全部由小于16的数字(0..9,a..f)组成的数值,如ffff、1e5a等。将十进制数转换为十六进制数是将全部由小于10的数字组成的数值转换为全部由小于16的数字组成的数值,如十进制数100转换为二进制数为64。


二、算法分析

逐个取出16进制数值各数字组成的字符串中的字符,得到它的序号(0..15),累加序号乘以16的n次方的和,n按0、1、2的规律变化。最终的累加和即为转换后的十进制数。

for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}


三、参考程序

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

/* 十六进制数转换为十进制数 */
long hexToDec(char *source);

/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch);

int main()
{
char *hex = "75BCD15";

printf("16进制数:\t%s\n", hex);
printf("10进制数:\t%ld\n", hexToDec(hex));

return 0;
}

/* 十六进制数转换为十进制数 */
long hexToDec(char *source)
{
long sum = 0;
long t = 1;
int i, len;

len = strlen(source);
for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}

return sum;
}

/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch)
{
if(ch >= 0 && ch <= 9)
{
return ch - 0;
}
if(ch >= A && ch <=F) 
{
return ch - A + 10;
}
if(ch >= a && ch <= f)
{
return ch - a + 10;
}
return -1;
}


四、运行测试

16进制数:       75BCD15
10进制数:       123456789
#include<stdio.h>
long fun(char*s);
#define N 50
void main()
{
long m;
char s[N];
printf("十六进制数 ");
scanf("%s",s);
m=fun(s);

printf("%ld",m);
}

long fun(char*s)
{
int i,t;
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;
}

我运行,能够得确答案int PowerXY(int x, int y)
{
if(y == 0)
return 1 ;
else
return x * PowerXY(x, y -1 ) ;
}

int Convert16To10(int number)
{
int r = 0 ;
int i = 0 ;
int result = 0 ;

while(number)
{
r = number % 16 ;
result += r * PowerXY(16, i++) ;
number /= 16 ;
}

return result ;
}
喜欢阅读
  • 雪豹战神

    雪豹战神

    七年前他的父母,为何离奇惨死?七年后中汉陆军司令官,又为何突然退役?说好不离不弃的竹马青梅,为何要被强嫁他人?不可一世的富二代,又为何拿狗链子拴住了自己?在达一切的背后,到底是人性的扭曲、还是道德的沦丧?

  • 总裁的霸道娇妻

    总裁的霸道娇妻

    他高傲自大,放荡不羁。她心思单纯,说话做事直来直去。一个是A市最有权势的人,一个是最普通不过的人,两人相遇后竟然发生了一系列的事情,随着两人关系的僵硬、缓和、僵硬、冷漠、淡然到最后的释怀,她发现自己是一个失忆的人,于是就和他一起去寻找梦中的那个他,而他也甘愿为她那么做。寻寻觅觅,来来往往,他居然发现自己就是她苦苦寻找的车祸男友,只不过被人易容成了现在的样子,她会接受他吗?

  • 天才双宝失忆妈咪

    天才双宝失忆妈咪

    “爹地,妈咪给你亲!”“爹地,妈咪给你举高高!”“爹地,妈咪给你生二胎!”失忆归来的苏暖表示很头疼,她又乖又听话的一对双胎胞孩子,居然直接把她送给了霍言深!这个在北城神秘莫测的高冷男人,说好的不喜欢女人呢?壁咚偷亲,帮她虐渣也就算了,还每天揣着户口本,缠她去民政局!“霍先生,我们真的不是很熟!”“没关系,结婚以后可以慢慢养熟!”

  • 致命囚宠:冷情总裁宠入骨

    致命囚宠:冷情总裁宠入骨

    10岁,她父母双亡沦为孤儿,他把她捡回家。他说:“记着,从今天起,你只属于我。”18岁,她无法忍受而逃脱,却被他捉回,烙印下他专属的印记。他说:“我说过,我不允许你离开我。”一次次折磨,一次次伤痛,一次次逃离,一次次禁锢。“邵安乔,你是我的女人,休想离开我,除非我死…”嘭——一声枪响。她呆呆地看着男人胸前的那一抹鲜红,手中的枪滑落,惊慌失措的跑过去抱着倒地的他,泪如雨下。

  • 远去的爱谁来收

    远去的爱谁来收

    曾经,程可欣认为,只要对他好,他就一定会回心转意,可现在她发现自己错了。哪怕她再心甘情愿的付出一切,也占据不了他的心。直到她终于下定决心转身离去,可一向冷酷倨傲的他竟然开始放下身段求自己回去。还有暗中操纵这一切的人……她究竟能否和段佑铭走到最后,还未曾可知。

  • 天道圣命

    天道圣命

    乱世之中,谁怜众生?苍穹之下,谁主轮回?这是一个圣人不死,大盗不止的故事。这是一个凡尘蝼蚁,礼义廉耻的故事。丁丑年,闰月,六朝古都城外,一个叫牧易的小道士翩然而至,春秋笔下,一场史诗由这龙兴之地拉开帷幕。·················

  • 至尊仙瞳

    至尊仙瞳

    落魄青年叶文轩被未婚妻抛弃,却偶得至仙瞳,能够看破一切,叶文轩逆袭都市,一飞冲天。赌宝,捡漏让他声名鹊起,慧眼称神。仙法,道诀让他修仙健体,医道无双,未来拥有无限可能,不仅宝物在手,还要财色兼收。高傲冷艳的美女总裁,火辣性感的大明星,清纯可爱的校花纷纷出现,叶文轩凭借至尊仙瞳,走上人生巅峰。

  • 谋心狂龙

    谋心狂龙

    酒吧里的一次小小的冲突.牵扯出了一个来历神秘的小保安!龙有逆鳞触之即死.狼生暗刺窥之则杀.血溅五步.只为了捍卫心中那个信仰!誓要用双手为她撑起一片没有委屈的天空.一个小人物.却缔造了大人物的传奇.美人江湖.繁华背后.那是一片血雨腥风.风起乱世……

  • 猜你喜欢
    热门推荐
  • steam csgo进游戏就掉
  • 末世可餐之圈养小娇妻
  • 2017廉洁自律个人总结
  • 碳字开头的成语接龙
  • 机油滤清器哪个牌子好
  • 百度云盘找人 源代码
  • 单人简单朗诵稿件 女生
  • 红岩中关于江姐的故事
  • www.dilkuy.com
  • stopstorage怎么办
  • 归谬法 如果那么的例子
  • make a convenience
  • castle clash wiki
  • taifulol
  • sketch mac 破解教程
  • sp 430c2
  • 中国矿业大学 现有院士
  • 炉石传说壁纸 竖屏壁纸
  • 巨乳柳濑早纪 裸体写真
  • David brain
  • All Right Reserved 完美网