C语言调用函数编写把十进制整数n转换成十六进制怎么编程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("\\n"); 

/*
运行结果:
17
转化为十六进制的数为:11
*/
参考技术A 调用系统函数strtol。我觉得你这个问题:把十进制整数n转换成十六进制怎么编程 本身就有问题,十进制整数n转换成十六进制只是显示方式不一样而已,在计算机内部其实都是按二进制存储的。比如int i; i=96和i=0x60你按%d打印出来的是一样的。 参考技术B #include <malloc.h>
#include <iostream>
#include<string>
#include<cctype>
#define STACKSIZE 50
#define STACKINCREMENT 20
#define OVERFLOW -1
#define OK 1
#define ERROR -1

using namespace std;

typedef struct

int *base;
int *top;
int stacksize;
Stack;

int InitStack(Stack &s) //创建一个空栈

s.base=(int*)malloc(STACKSIZE*sizeof(int));

if(!s.base)
return (OVERFLOW);

s.top=s.base;

s.stacksize=STACKSIZE;

return (OK);


int Push(Stack &s,int e) //入栈

if((s.top-s.base)>=s.stacksize)

s.base=(int*)realloc(s.base,(STACKSIZE+STACKINCREMENT)*sizeof(int));
if(!s.base)
return(OVERFLOW);

s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;

*s.top++=e;
return (OK);


int Empty(Stack s) //判断栈是否为空

if(s.base==s.top)
return(1);
else
return(0);

int * Pop(Stack &s,int *e)

if(Empty(s))
return (NULL);
e=--s.top;
return e;


void main()


int i,*e;
e=new int ;

int *getResult;
getResult=new int ;
char ch;

do
cout<<"请输入一个正整数: "<<endl;
cin>>i;

Stack s;

InitStack(s);

while(i)

Push(s,i%16);
i=i/16;



cout<<"转为的16进制数为: "<<endl;

while(!Empty(s))

e=Pop(s,getResult);
if(e!=NULL)
cout<<*e;


cout<<endl;

cout<<"您想继续求解十六进制吗?请输入您的选择(y/n)"<<endl;
cin>>ch;
if(isupper(ch)==1)
ch=tolower(ch);
while(ch!='n');

本回答被提问者和网友采纳
参考技术C 简单方法之一:
#include <iostream>
#include <stdio.h>
using namespace std;

int main(void)

int num;
char buf[100];
cin>>num;
itoa(num,buf,16);
cout<<buf<<"\n";

return 0;

参考资料:还有其他方法可以参考http://hi.baidu.com/hong3088/blog/item/6f8a802e93bf003f1e3089d1.html

参考技术D #include<stdio.h>
int main()

int n;
scanf("%d",&n);
printf("%x\n",n);
return 0;

c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。

字符串长度20位以上都可以实现。
我是初学者 刚学了数组和函数

下面这个是本人一年前写的一个可以把十进制转换成1-16进制的一个进制转换器。
#define N 100
void main(void)

int c=0,i,j,k,a[N];
long num;
char A,B,C,D,E,F;
printf("please input the number of you want to conversion\n"); /*输入要转换的十进制数*/
scanf("%ld",&num);
printf("\nplease input the number of scale\n"); /*输入要转换成几进制的数1-16*/
scanf("%d",&k);
for(j=0;j<N;j++)

a[j]=num%k; /*取余数赋值给数组a的成员*/
num=num/k; /*对数值num求商数,使其在下次循环时有一个新的值*/

if(num<k) /*当所要num的值小于要转换的进制数时跳出循环*/
continue;
c++; /*利用一个变量来计数,使下面输出数组进程可以有一个明确输出位数范围*/

for(i=c+1;i>=0;i--) /*倒输数组a,原理是数学的“除n取倒商法”*/

if(a[i]==10) /*十六进制中以字母ABCDEF代替9以上数字,所以在满足条件时输出字母代替10、11、12等数字*/
printf("%c",65);
else if(a[i]==11)
printf("%c",66);
else if(a[i]==12)
printf("%c",67);
else if(a[i]==13)
printf("%c",68);
else if(a[i]==14)
printf("%c",69);
else if(a[i]==15)
printf("%c",70);
else
printf("%d",a[i]); /*若没有大于9的数字,则按整形数据输出*/

getch();
参考技术A #include<stdio.h>

char intToChar(const int intValue)

switch(intValue)

case 1: return '1';
case 2: return '2';
case 3: return '3';
case 4: return '4';
case 5: return '5';
case 6: return '6';
case 7: return '7';
case 8: return '8';
case 9: return '9';
case 0: return '0';
default: return '\0';



int charToInt(const char cValue)

switch(cValue)

case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
case '0': return 0;
default: return 0;



/**
* 子函数用于获取字符数组除2的余数,同时数组将改变为商
* arrayLen 输入参数 字符数组的长度
* array 输入参数 字符数组(字符数组在子函数自动退化为指针)
* return 返回0或1表示除2的余数,-1表示输入的字符串已经全为0了
**/
int getRemainder(const int arrayLen, char* array)

int flag = 0; // 退位标识
int oldInt; // 除2前的数值
int newInt; // 除2后的数值
bool isZero = true;
int i; // 用来计数
// 遍历数组,从第一位除到最后一位,然后返回最后余数
for (i = 0; i < arrayLen; i++)

oldInt = charToInt(array[i]) + (flag * 10);
if (oldInt > 0)

isZero = false;


newInt = oldInt / 2;
flag = oldInt % 2;
array[i] = intToChar(newInt);


if (isZero)

return -1;

else

return flag;



int main()

const int MAX_ARRAY_SIZE = 50;
char decimalArray[MAX_ARRAY_SIZE+1];
int i; // temp variable for cycle
char c; // temp variable for getchar
printf("Please input the decimal. The char, which is not digital, means valid end.\n");
for (i = 0; (i < MAX_ARRAY_SIZE) && ((c = getchar()) >= '0') && (c <= '9'); i++)

decimalArray[i] = c;

decimalArray[i] = '\0'; // very important, Prevent cross-border
const int dArrayLen = i;
printf("The valid input is %s\n", decimalArray);

printf("------------begin translate------------\n");
int remainValue = 0; //
char binaryArray[MAX_ARRAY_SIZE * 3 + 1];
for (i = 0; remainValue != -1; i++)

remainValue = getRemainder(dArrayLen, decimalArray);
binaryArray[i] = intToChar(remainValue);
if (remainValue != -1) // 因为除2取余函数是验证输入是否全零,不加这个判断最后会多输出一行无意义信息

printf("after %d's divide by 2, the decimal array is %s\n", i + 1, decimalArray);


const int binaryLen = i;
printf("--------------end translate------------\n");

printf(" The correspond binary is: ");
for (i = binaryLen - 1; i >= 0; i--)

printf("%c", binaryArray[i]);

printf("\n");

return 0;

以上是关于C语言调用函数编写把十进制整数n转换成十六进制怎么编程?的主要内容,如果未能解决你的问题,请参考以下文章

C语言 把char 型 或者 整数转化成二进制 要怎么转

用C语言如何把十进制转换为十六进制,要求程序中运用函数

C语言怎么把字符串转换为可以用于计算的数字

c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。

C语言,如何把输入的一个字符串,转换为相应的二进制数?

C语言,如何把输入的一个字符串,转换为相应的二进制数?