c语言编程 把十进制转换为十六进制

作者&投稿:尾厚 (若有异议请与网页底部的电邮联系)
C语言调用函数编写把十进制整数n转换成十六进制怎么编程?~

思路:十进制整数转换为十六进制整数采用"除16取余,逆序排列"法。具体做法是:用16整除十进制整数,可以得到一个商和余数;再用16去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为十六进制数的低位有效位,后得到的余数作为十六进制数的高位有效位,依次排列起来。
参考代码:
#include "stdio.h" int main() { int num,a[100],i=0,m=0; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};scanf("%d",&num); while(num>0) { a[i++]=num%16; num=num/16; } printf("转化为十六进制的数为:"); for(i=i-1;i>=0;i--)//倒序输出 { m=a[i];printf("%c",hex[m]); } printf("
"); }/*运行结果:17转化为十六进制的数为:11*/

代码如下:
#include "stdio.h" int main() { int num=0;int a[100]; int i=0; int m=0;int yushu; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};printf("请输入一个十进制整数:"); scanf("%d",&num); while(num>0) { yushu=num%16; a[i++]=yushu; num=num/16; } printf("转化为十六进制的数为:0x"); for(i=i-1;i>=0;i--)//倒序输出 {m=a[i];printf("%c",hex[m]); } printf("
"); }
程序运行结果:

扩展资料
C语言中,十进制转换十六进制,可以先输入十进制整数,然后去拼十六进制,十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头,只需把二进制除以16得到余数去上面定义的hex[16]数组进行取值接可以得到转换的数字。
参考资料:百度百科-十六进制

方法一:

#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
", hex_str);  return 0;}



1、方法一:使用进制转换。

  • #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;

  • }

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
    ",a);

  • printf("%d
    ",a);

  • linux@ubuntu:~/test$ ./a.out 

  • a23cd

  • 664525

扩展资料

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

参考资料

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("
");   

printf("%d(10)转换为16进制数字为:",u10); 

for(i=w-1;i>=0;i--)    {        printf("%c",u16[i]);  

}    printf("
");}

扩展资料 

十六进制(英文名称: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语言 百度百科



编程程序如下:

#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("
");    printf("%d(10)转换为16进制数字为:",u10);    for(i=w-1;i>=0;i--)    {        printf("%c",u16[i]);    }    printf("
");}

扩展资料

十六进制转换十进制

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

参考资料 百度百科-十六进制



#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
", hex_str);  return 0;}

扩展资料:

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

-------------------------------------

10997

直接计算就是:

5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997

16进制到二进制

由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,所以,我们可以得出简便的转换方法,将16进制上每一位分别对应二进制上四位进行转换,即得所求

参考资料:十六进制转换




钟祥市13530356365: 十进制数字转化为十六进制?(用C语言) -
闫饱首抗: 这个容易,你输入一个10进制的数让它一16进制输出就可以了! main() {int a;scanf("%d",&a);printf("%x\n",a);getch(); }

钟祥市13530356365: 编一个C程序将10进制转化成16进制 -
闫饱首抗: #include <stdio.h>#define N 10 int main(void) { int i,t,num, a[N]; i=0; int j; printf("输入一个整数:"); scanf("%d",&num); do { t=num%16; if(t>=0&&t<10) { a[i]=t; } else if(t>=10&&t<16) { a[i]='A'+t-10; } i++; num/=16; }while(num); for(j=i-1;j>=0;...

钟祥市13530356365: C语言十进制转十六进制 -
闫饱首抗: 其实根本不用这个的,输出函数printf有X是代表输出16进制的数,可以直接调用,那样就能将10进制变成16进制!例如:#include <stdio.h> main () { int a; scanf ("%d",&a); printf ("%X",a); }

钟祥市13530356365: c语言编程 把十进制转换为十六进制 -
闫饱首抗: 方法一:#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) 32313133353236313431303231363533e59b9ee7ad...

钟祥市13530356365: 在c语言中用最简单的方法把十进制转化为十六进制 -
闫饱首抗: 代码如下: #include "stdio.h" int main() { int num=0;int a[100]; int i=0; int m=0;int yushu; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};printf("请输入一个2113十进制5261整数:"); scanf("%d",&num); while(num>0) { ...

钟祥市13530356365: c语言,求助大神<( ̄ˇ ̄)/~求程序<( ̄ˇ ̄)/~ 编写程序,将一个十进制数转换为十六进制数. -
闫饱首抗: 若十进制数23785转为十六进制,则用23785/16=1486余9,1486/16=92余14,92/16=5余12,5/16=0余5,十六进制中,10对应为a、11对应为b、......、15对应为f,再将余数倒写为5ce9,则十进制23785=十六进制5ce9 十六进制数的第0位...

钟祥市13530356365: C程序十进制转换为十六进制
闫饱首抗: public char[] function(long l){ char[] c = new char[100]; int i = 0; int temp; char[] tempc =... tempc[15] = 'F'; while(l > 0){ temp = (int)l % 16;//强制转换为int类型 c[i] = tempc[temp]...

钟祥市13530356365: 编一个C程序,将一个十进制数转化为十六进制数
闫饱首抗: #include void main() { int n; int a[8], j=0; scanf("%d", &n); while(n > 0) { a[j] = n % 16; n /= 16; ++j; } for(--j; j>=0; --j) if (a[j] > 9) printf("%c", 'A'+a[j]-10); else printf("%d", a[j]); printf("\n"); }

钟祥市13530356365: 用c语言编写函数,将输入的十进制数转换成十六进制数并输出 -
闫饱首抗: //#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h" int main(void){ unsigned n,i,k; printf("Please enter a positive integer...\nn="); scanf("%d",&n); printf("%d(10) = 0x",n); if(n){ for(i=0;(n&0xf0000000)==0;n<<=4,i++); for(;i...

钟祥市13530356365: 10进制转换为16进制的C程序设计
闫饱首抗: #include<stdio.h> #define N 8 #define k 16 void tran(int num) { int arr[N],i; for (i=0;i <N;i++) { arr[i]=num%k; num=num/k; if (num==0) break; } printf("转换为%d进制数为: ",k); for (;i>=0;i--) switch (arr[i]) { case 10: printf("A");break; case 11: ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网