C语言怎么将超大的16进制数转换成10进制,这个16进制数是个大数,比如0x123456789ABCDEF12345这种
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎么将超大的16进制数转换成10进制,这个16进制数是个大数,比如0x123456789ABCDEF12345这种相关的知识,希望对你有一定的参考价值。
16进制转换为10进制 ,我手上没代码,但是我有一个十进制转换为任意进制的代码,你可以参考一下,其实进制转换问题最重要的是理解进制转换的原理,你把我的程序读一遍都明白了相信你就知道怎么做了,想成为编程高手就是要从仿写过渡到自己尝试去写,大胆的迈出步才能变强。 最后再提一句,你十六进制必定是以字符串的形式录入,也就是字符数组。#include<stdio.h>
int main()
int i,x,o,u,r;
while(scanf("%d",&x)!=EOF) //输入要转换的数
scanf("%d",&r); //转为r进制
o=0;
if(x>0)
char a[1000]=0,b[1000]=0;
for(i=x,o=0;i>=1;i=i/r,o++) // 我这个循环是将输入的整数从低位到高位按照r进制一个个取余取出来
a[o]=i%r+48; //根据ascll码将每一位转换为小写字母或字符型整数存入数组
if(a[o]>57)
a[o]=7+a[o];
a[o]='\0';
for(u=0,i=o-1;i>=0;i--)
b[u]=a[i];u++;
b[u]='\0';
puts(b);
else printf("0\n");
参考技术A 你说的应该是字符串形式的吧?!如果是数值形式的不需要转换。字符串转换可以按自己接一个一个遍历16进制串,判断每一个字节值:
在“0”~“9”之间就用这个16进制的值减去48(“0”的ascii码)就变为了10进制。
在“a”~“f”之间就用这个16进制的值减去“a”+10就变为了10进制数。
在“A”~“F”之间就用这个16进制的值减去“A”+10就变为了10进制数。
//十六进制字符串转换成十进制数字字符串
int Hex2Dec(CString str, int length)
char revstr[50] = 0 ; //根据十六进制字符串的长度,这里注意数组不要越界
int num[50] = 0 ;
int count = 1;
int result = 0;
strcpy_s(revstr, str);
for (int i = length - 1; i >= 0; i--)
if ((revstr[i] >= '0') && (revstr[i] <= '9'))
num[i] = revstr[i] - 48;//字符0的ASCII值为48
else if ((revstr[i] >= 'a') && (revstr[i] <= 'f'))
num[i] = revstr[i] - 'a' + 10;
else if ((revstr[i] >= 'A') && (revstr[i] <= 'F'))
num[i] = revstr[i] - 'A' + 10;
else
num[i] = 0;
result = result + num[i] * count;
count = count * 16;//十六进制(如果是八进制就在这里乘以8)
return result;
参考技术B #include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
void HexToDec(void)
char *pn_Result,n_Long[]="123456789ABCDEF12345",*pn_old;
unsigned char num,rn,c,n_l,cx,vx,ii=0,i,j;
n_l=strlen(n_Long);
for(c=0; c<n_l; c++)
if(!isxdigit(*(n_Long+c)))
printf("\\n Sorry! You are errer. Can only enter hexadecimal digit!!!\\n\\n");
return;
cx=(char)(n_l*1.2)+3;
vx=cx-1;
if(!(pn_old=(char *)malloc(sizeof(char)*(n_l+1))) || !(pn_Result=(char *)malloc(sizeof(char)*cx)))
printf("Memory is errer!");
exit(1);
strcpy(pn_old,n_Long);
strupr(n_Long);
vx=0;
for(i=0;c=n_Long[i];)
if(vx==0)
vx++;
else if(c=='0')
i++;
continue;
num=c-(c<='9' ? '0' : 0x37);
for(j=i;;j++)
c=num/10;
n_Long[j]=c+(c<=9 ? '0' : 0x37);
rn=num%10;
if((c=n_Long[j+1])==NULL)
break;
num=16*rn+c-(c<='9' ? '0' : 0x37);
pn_Result[ii++]=rn+'0';
pn_Result[ii]=NULL;
printf("The result is:\\n0x%s(16) = %s(10).\\n\\n",pn_old,strrev(pn_Result));
free(pn_old);
free(pn_Result);
int main(int argc,char *argv[])
HexToDec();
return 0;
本回答被提问者采纳
c语言编程 把十进制转换为十六进制
通过键盘输入一个十进制数,然后将其转换为十六进制。要求:进行分层,当1~15时,是1到F;如为666时,转换为29A;667转化为29B。不要如printf("\n十六进制为%x",i)这种直接的。
方法一:
#include<iostream>
#include <string>
using namespace std;
string DecIntToHexStr(long long num)
string str; long long Temp = num / 16; int left = num % 16; if (Temp > 0) str +=
DecIntToHexStr(Temp); if (left < 10) str += (left + '0'); else str += ('A' + left - 10); return str;
string DecStrToHexStr(string str) long long Dec = 0; for (int i = 0; i < str.size(); ++i) Dec =
Dec * 10 + str[i] - '0'; return DecIntToHexStr(Dec);int main()
string DecStr; while (cin >> DecStr) cout << "0x" + DecStrToHexStr(DecStr); return 0;
方法二:
#include<iostream>
#include <string>
#include<vector>
#include <sstream>
#include <math.h>
using namespace std;int main()
string decStr; cin >> decStr; int num = stoi(decStr); vector<int>v; while (num) int bit = num % 2; v.push_back(bit); num = num / 2;
reverse(v.begin(), v.end()); string hexStr; if (v.size() % 4 == 0) for (int i = 0; i < v.size() / 4; ++i) int temp = 0, k = 3; for (int j = i * 4; j < (i +
1) * 4; ++j) if (v[j] == 1) temp += pow(2, k); --k; if (temp <= 9) hexStr += temp; else hexStr += ('A' + temp - 10);
else int zeroNum = 4 - v.size() % 4; for (int i = 0; i < zeroNum; ++i) v.insert(v.begin(), 0); for (int i = 0; i < v.size() / 4; ++i) int temp = 0, k = 3; for
(int j = i * 4; j < (i + 1) * 4; ++j) if (v[j] == 1) temp += pow(2, k); --k;
if (temp <= 9) stringstream ss; string strTemp;
ss << temp; ss >> strTemp; hexStr += strTemp; else hexStr += ('A' + temp - 10); cout << hexStr << endl; return 0;
扩展资料:
还有3种方式可以实现,其中两种是使用系统函数,另一种是直接自己编写。
下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。
利用系统函数有
1. char * itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa) itoa (aa, buffer, 16); return (buffer);
2. sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa) sprintf(buffer, "%x", aa); return (buffer);
3. 自己编写
如果参数只要两位数的整数,那么很简单。
代码如下:
#include <stdio.h>#include <stdlib.h> char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa)
sprintf(buffer, "%x", aa); return (buffer); int main ()
int num; char * hex_str; printf ("Enter a number: "); scanf ("%d",&num); hex_str = inttohex (num); printf ("Hexadecimal number: %sH\\n", hex_str); return 0;
参考技术A1、方法一:使用进制转换。
#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;
2、方法二:可以使用sscanf函数将以字符串形式的十六进制数转换为整型的十六进制。
sscanf函数的用法与printf函数很像,都是以格式化的形式进行操作。例如如下的例子中sscanf("A23CD", "%x", &a);"%x"是将字符串A23CD以十六进制形式输入a中,如果将"%x"换成为"%d"的话,就是将字符串A23CD以十进制形式输入a中,这显然是错误的,因为将A23CD转换为十进制的时候,无法解析A,CD等字符,所以得出的结果就是错误的。
int a;
sscanf("A23CD", "%x", &a);
printf("%x\\n",a);
printf("%d\\n",a);
linux@ubuntu:~/test$ ./a.out
a23cd
664525
扩展资料
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
参考资料
C语言-百度百科
十六进制转十进制,方法如下:16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。例:2AF5换算成10进制:用竖式计算:第0位: 5 * 16^0 = 5第1位: F * 16^1 = 240第2位: A * 16^2= 2560第3位: 2 * 16^3 = 8192直接计算就是:5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997☺️☺️☺朋友,️如果对您有帮助的话,麻烦给个赞,谢谢。
参考技术C程序如下:
#include<stdio.h> main()
int u10; char u16[10];
int w=0,a,b,i;
printf("请输入一个数字-->");
scanf("%d",&u10);
if(u10==0)
u16[0]='0'; w++;
else a=u10;
while(a) b=a%16;
if(b<10) u16[w]='0'+b;
else u16[w]='A'+b-10;
a=a/16; w++;
printf("\\n");
printf("%d(10)转换为16进制数字为:",u10);
for(i=w-1;i>=0;i--) printf("%c",u16[i]);
printf("\\n");
扩展资料
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
程序的表达方法环境 格式备注URL%hex无 XML,XHTML&#xhex无HTML,CSS#hex6位,表示颜色UnicodeU+hex6位,表示字符编码MIME=hex无Modula-2#hex无Smalltalk,ALGOL 6816rhex无Common Lisp#xhex或#16rhex无IPv68个hex用:分隔无C C++的表达方法。
如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。
C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)
参考资料 十六进制 百度百科 C语言 百度百科
参考技术D编程程序如下:
#include<stdio.h> main() int u10; char u16[10]; int w=0,a,b,i; printf("请输入一个数字-->"); scanf("%d",&u10); if(u10==0) u16[0]='0'; w++; else a=u10; while(a) b=a%16; if(b<10) u16[w]='0'+b; else u16[w]='A'+b-10; a=a/16; w++; printf("\\n"); printf("%d(10)转换为16进制数字为:",u10); for(i=w-1;i>=0;i--) printf("%c",u16[i]); printf("\\n");扩展资料:
十六进制转换十进制
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,以此类推。在第N(N从0开始)位上,如果是数β (β大于等于0,并且β小于等于 15,即:F)表示的大小为 β×16的N次方。
假设有一个十六进数 2AF5直接计算就是:5×160+F×161+A×162+2×163=10997
参考资料 百度百科-十六进制
以上是关于C语言怎么将超大的16进制数转换成10进制,这个16进制数是个大数,比如0x123456789ABCDEF12345这种的主要内容,如果未能解决你的问题,请参考以下文章