c语言中16进制转换为十进制 C语言如何实现十六进制转换成十进制

c\u8bed\u8a0016\u8fdb\u5236\u8f6c\u6362\u4e3a10\u8fdb\u5236\u6570\u7684\u51fd\u6570\u662f\u4ec0\u4e48\uff1f

1\u3001\u53ef\u4ee5\u6839\u636e16\u8fdb\u5236\u8f6c10\u8fdb\u5236\u7684\u7b97\u6cd5\uff08\u5373\u5404\u4f4d\u4f4d\u7801\u503c\u4e58\u4ee5\u4f4d\u6743\u4e4b\u548c\uff09\u6765\u5b9e\u73b0\u8be5\u529f\u80fd\u30022\u3001\u5177\u4f53\u5b9e\u73b0\u65b9\u6cd5\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u7a0b\u5e8f\uff1a
#include void main(){ int he; int re=0; // \u4fdd\u5b58\u8f6c\u6362\u4e3a10\u8fdb\u5236\u7684\u7ed3\u679c int k=16; // 16\u8fdb\u5236 int n=1; // \u4f4d\u6743 scanf("%d", &he); // \u63a5\u6536\u7528\u6237\u8f93\u5165\u768416\u8fdb\u5236\u6570\uff0c\u4e0d\u542b0x\u524d\u7f00 while(he != 0) { re += (he%10)*n; // \u53d6\u51fa\u5404\u4f4d\u4f4d\u7801\u503c\uff0c\u5e76\u4e58\u4ee5\u5bf9\u5e94\u7684\u4f4d\u6743\u503c he /= 10; // \u53bb\u638916\u8fdb\u5236\u6570\u7684\u6700\u4f4e\u4f4d\uff0c\u6b21\u4f4e\u4f4d\u53d8\u4e3a\u6700\u4f4e\u4f4d n *= k; // \u4f4d\u6743\u4e58\u4ee516 } printf("%d",re); // \u8f93\u51fa\u8f6c\u6362\u540e\u7684\u7ed3\u679c}

C\u8bed\u8a00_012_\u5341\u516d\u8fdb\u5236\u8f6c\u5341\u8fdb\u5236

最简单的使用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等字符,所以得出的结果就是错误的。



一、问题描述

十进制数是指各位数字全部由小于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进制数:%s
", hex);
printf("10进制数:%ld
", 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 ;
}

上面的大哥真有毅力啊
#include<stdio.h>
void
main()
{
long
n;
printf("Please
input
a
十六进制
number:\n");
scanf("%lx",&n);
printf("十六进制转换为十进制\n");
printf("%ld",n);
printf("\n");
}

  • 濡備綍鎶16杩涘埗鏁拌浆鍖涓10杩涘埗,c璇█缂栧啓
    绛旓細16杩涘埗鏁拌浆10杩涘埗鏁板師鐞嗭細鏌16杩涘埗鏁板叡n浣嶏紝绗琻浣嶈〃绀轰负Xn銆傝浆鎹㈠悗鐨10杩涘埗鏁拌〃绀轰负Y銆俌 = Xn脳16^0 + Xn-1脳16^1 + Xn-2脳16^2 + 鈥︹ + X1脳16^n-1銆俰nclude <stdio.h>#include <math.h>#include <string.h>/* 浠绘剰杩涘埗鏁拌浆鍗佽繘鍒舵暟 *//* char *value : 鍏朵粬杩涘埗鏁 */...
  • c璇█涓16杩涘埗杞崲涓哄崄杩涘埗
    绛旓細鏈绠鍗曠殑浣跨敤scanf()鍑芥暟鍜宲rintf()鍑芥暟杩涜鏍煎紡杞崲,浠16杩涘埗鏍煎紡杈撳叆,鍐嶄互10杩涘埗鏍煎紡杈撳嚭銆 绋嬪簭浠g爜濡備笅: #include<stdio.h> int main() { int a=0; int i=0; scanf("%x",&a); printf("%d",a); return 0; } 杩愯缁撴灉: 鎵╁睍璧勬枡: scanf鍑芥暟涓巔rintf鍑芥暟鐨勭敤娉曞緢鍍,閮芥槸浠ユ牸寮忓寲鐨勫舰寮忚繘琛...
  • c璇█16杩涘埗杞崲涓10杩涘埗鏁扮殑鍑芥暟銆
    绛旓細1銆佸彲浠ユ牴鎹16杩涘埗杞10杩涘埗鐨勭畻娉曪紙鍗冲悇浣嶄綅鐮佸间箻浠ヤ綅鏉冧箣鍜岋級鏉ュ疄鐜拌鍔熻兘銆2銆佸叿浣撳疄鐜版柟娉曞彲浠ュ弬鑰冨涓嬬▼搴忥細include <stdio.h>void main(){ int he; int re=0; // 淇濆瓨杞崲涓10杩涘埗鐨勭粨鏋 int k=16; // 16杩涘埗 int n=1; // 浣嶆潈 scanf("%d", &he); ...
  • 鐢C璇█瀹炵幇16杩涘埗杞寲涓10杩涘埗?
    绛旓細C璇█绋嬪簭涓紝鍗佽繘鍒跺拰鍗佸叚杩涘埗瀹為檯鏄簰閫氱殑銆鍗佸叚杩涘埗鏁扮敱鏁板瓧0~9銆佸瓧姣岮~F锛堟垨a~f锛夌粍鎴愩傛妸鍗佸叚杩涘埗鏁版寜鏉冨睍寮銆佺浉鍔犲嵆寰楀崄杩涘埗鏁銆傜幇瀹炰腑鍗佸叚杩涘埗鏁板拰鍗佽繘鍒舵暟涓嶅彲浠ョ洿鎺ョ浉鍔狅紝濡傛槸鍦ㄧ數鑴戜笂鐨勮瘽鏄彲浠ョ殑锛屼綍绉嶈繘鍒舵暟鍦ㄧ數鑴戜笂閮芥槸浠ヤ簩杩涘埗鐨勫舰寮忚〃绀虹殑锛屽湪鐢佃剳缂栧啓绋嬪簭鏃舵槸鍙互鐩稿姞鐨勩傚崄杩涘埗鏁...
  • C璇█闂,16杩涘埗杞崲鍒10杩涘埗,姹傛濊矾
    绛旓細16杩涘埗灏辨槸 閫16杩1锛屽叾瀹炶窡10杩涘埗鏄竴涓亾鐞嗐傚彧鏄1鍒9鍙兘琛ㄧず9涓暟瀛 鎵浠ョ敤A琛ㄧず10 鍚岀悊 B鏄11锛C鏄12锛孌鏄13 锛孍鏄14锛孎鏄15 涓涓鍗佸叚杩涘埗閫氬父浠ュ墠缂0x 鎴0X寮澶淬備緥濡0xabcd 杞崲10杩涘埗 鍗充负 d*16^0+c*16^1+b*16^2+a*16^3 = 13+12*16+11*16^2+10*16^3 ...
  • C璇█濡備綍瀹炵幇鍗佸叚杩涘埗杞崲鎴鍗佽繘鍒
    绛旓細C璇█瀹炵幇鍗佸叚杩涘埗杞崲鎴鍗佽繘鍒濡備笅锛氫緥濡傚皢鍗佸叚杩涘埗鏁板瓧 9FA8C 杞崲鎴愬崄杩涘埗锛9FA8C = 9脳164 + 15脳163 + 10脳162 + 8脳161 + 12脳160 = 653964锛堝崄杩涘埗锛夈備粠鍙冲線宸︾湅锛岀1浣嶇殑浣嶆潈涓 160=1锛岀2浣嶇殑浣嶆潈涓 161=16锛岀3浣嶇殑浣嶆潈涓 162=256锛岀4浣嶇殑浣嶆潈涓 163=4096锛岀5浣嶇殑...
  • 濡備綍鐢C璇█瀹炵幇鍗佸叚杩涘埗杞崲涓哄崄杩涘埗.
    绛旓細);scanf("%d",&x); // %d 灏辨槸鎸10杩涘埗杈撳叆 printf("The hex is %x\n", x锛夛紱 // %x 灏辨槸鎸16杩涘埗杈撳叆 // c/c++ 鏈 itoa 鍑芥暟锛屽彲浠ユ妸鏁村瀷杞悇绉嶈繘鍒讹紝瀛樻斁浜庡瓧绗︽暟缁剆閲岋紝// 渚嬪 2杩涘埗锛 itoa(x,s,2); 8杩涘埗锛 itoa(x,s,8); 16 杩涘埗锛 itoa(x,s,16);...
  • C璇█鐨鍗佸叚杩涘埗鍜屽叓杩涘埗鎬庝箞杞崲鎴鍗佽繘鍒,姹傝缁嗙殑鎻忚堪,姣斿鍏繘鍒101...
    绛旓細鍗佸叚杩涘埗鍜屽叓杩涘埗杞崲鎴鍗佽繘鍒锛屽氨鏄搴斾綅鍊间箻浠ヤ綅鏉冿紝鍏繘鍒101杞寲鎴愬崄杩涘埗灏辨槸1*8^2 + 0*8^1 + 1*8^0 = 64+0+1=65 鍗佸叚杩涘埗鍚岀悊 鍗佸叚杩涘埗鍜屽叓杩涘埗鍦C璇█涓鐨勮〃绀烘柟娉曞甫涓婅浆涔夊瓧绗"\"杩欐槸杞箟瀛楃鐨勮〃绀烘柟娉曚箣涓锛堝叡涓夌琛ㄧず鏂规硶锛屽彲浠ョ湅涔︼級鍗佸叚杩涘埗鏄紑澶寸敤0x ...
  • c璇█鍗佸叚杩涘埗杞鍗佽繘鍒鏂规硶
    绛旓細鍙互鐢<stdlib.h> 涓殑char*_itoa(intvalue,char*string,intradix);鎶婃暣鍨杞崲涓鍏朵粬杩涘埗鐨勫瓧绗︿覆鍙傝冧唬鐮侊細int main(){int a=110;char p;_itoa(110,p,16); //16琛ㄧず16杩涘埗,杩樺彲浠ョ敤2銆8銆10printf("%s",p);return 0;} GCC锛孏NU缁勭粐寮鍙戠殑寮婧愬厤璐圭殑缂栬瘧鍣紝MinGW锛學indows鎿嶄綔绯荤粺涓嬬殑...
  • 扩展阅读:16进制在线转换器 ... 进制转换器在线计算器 ... 16进制计算器 ... 在线十进制 ... 16进制生成器 ... 中文转16进制在线工具 ... 十六进制计算在线 ... 16进制b代表 ... 16进制计算器在线计算 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网